Sqlite简介
以下摘自百度百科:
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2021年已经接近有21个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
python中内置Sqlite3,故无需安装第三方库,直接使用即可。
本文代码已上传至GitHub,项目地址如下:
https://github.com/XMNHCAS/SqlitePythonDemo
建库建表
在测试文件夹中创建CreateDatabase.py,导入sqlite3,然后创建一个sqlite数据库,并创建一张User表。
import sqlite3
# 若无该数据库,则创建Sqlite数据库并打开
# 若有,则直接打开数据库
conn = sqlite3.connect('test.db')
# 获取该数据库的游标
cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
cursor.execute('CREATE TABLE User (ID INTEGER Primary KEY, Name TEXT, Age INTEGER)')
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
运行后则会在create.py所在的目录下生成一个test.db的文件,该文件即为sqlite数据库文件,若需要连接其他位置的sqlite数据库,则在connect 填入对应的数据库文件路径即可。
使用navicat打开test.db,可以看到我们已经成功创建User表。
增删改查(CRUD)
新增记录(Create)
直接使用游标执行insert语句,可以获取到影响的行数。
import sqlite3
# 打开数据库
conn = sqlite3.connect('test.db')
# 获取该数据库的游标
cursor = conn.cursor()
# 执行单条数据插入,并返回操作行数
singleInsert = cursor.execute("INSERT INTO User (Name, Age) VALUES ('张三', 18)")
print(f"插入了{singleInsert.rowcount}条数据")
# 执行批量插入,并返回操作行数
sql = "INSERT INTO User (Name, Age) VALUES (?, ?)"
batchInsert = cursor.executemany(sql, [('李四', 19), ('王五', 22)])
print(f"批量插入了{batchInsert.rowcount}条数据")
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
运行结果:
使用navicat查询可以看到数据已经成功插入:
检索记录(Retrieve)
检索记录分三种模式,第一种是直接获取全部数据,第二种是获取前N条数据,第三种是移动游标,一条一条地获取数据。
import sqlite3
# 打开数据库
conn = sqlite3.connect('test.db')
# 获取该数据库的游标
cursor = conn.cursor()
# 获取全部记录
cursor.execute("SELECT * FROM User")
allData = cursor.fetchall()
print("直接获取全部记录:")
for item in allData:
print(item)
# 获取前N条记录
cursor.execute("SELECT * FROM User")
manyData = cursor.fetchmany(2)
print("获取部分结果:")
for item in manyData:
print(item)
# 一次读取一条结果,循环获取所有记录
cursor.execute("SELECT * FROM User")
print("一次读取一条结果,循环获取所有记录:")
while True:
singleData = cursor.fetchone()
if singleData is None:
break
print(singleData)
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
运行结果如下:
更新记录(Update)
可以仅修改单条记录,也可以修改多条记录。
import sqlite3
# 打开数据库
conn = sqlite3.connect('test.db')
# 获取该数据库的游标
cursor = conn.cursor()
cursor.execute("SELECT * FROM User")
print("修改前的数据:")
print(cursor.fetchall())
# 执行单条数据修改,并返回操作行数
singleUpdate = cursor.execute("UPDATE User SET Age = 20 WHERE Name = '张三'")
print(f"修改了{singleUpdate.rowcount}条数据")
cursor.execute("SELECT * FROM User")
print("修改单条数据后的数据:")
print(cursor.fetchall())
# 执行批量修改,并返回操作行数
sql = "UPDATE User SET Age = ? WHERE Name = ?"
batchUpdate = cursor.executemany(sql, [(25, '李四'), (35, '王五')])
print(f"批量修改了{batchUpdate.rowcount}条数据")
cursor.execute("SELECT * FROM User")
print("批量修改后的的数据:")
print(cursor.fetchall())
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
运行结果如下:
删除数据(Delete)
同样支持删除单条数据或者批量删除数据。
import sqlite3
# 打开数据库
conn = sqlite3.connect('test.db')
# 获取该数据库的游标
cursor = conn.cursor()
cursor.execute("SELECT * FROM User")
print("删除前的数据:")
print(cursor.fetchall())
# 执行单条数据修改,并返回操作行数
singleDelete = cursor.execute("DELETE FROM User WHERE ID = 1")
print(f"删除了{singleDelete.rowcount}条数据")
cursor.execute("SELECT * FROM User")
print("删除单条数据后的数据:")
print(cursor.fetchall())
# 执行批量删除,并返回操作行数
sql = "DELETE FROM User WHERE ID = ?"
batchDelete = cursor.executemany(sql, [('2'), ('3')])
print(f"批量删除了{batchDelete.rowcount}条数据")
cursor.execute("SELECT * FROM User")
print("批量删除后的的数据:")
print(cursor.fetchall())
# 关闭Cursor:
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()
运行结果如下: