SQLite 是一个轻量小巧且十分灵活的文件型数据库,Python 标准库中内置了对它的功能支持。本文总结了如何在 Python 编程语言中通过标准库来操作 SQLite。
跟使用其他 Python 库一样,使用前需要先导入 SQlite
import sqlite3
然后就可以连接数据库文件了,这里假设当前目录下有一个命名为 test.sqlite 的 SQLite 数据库文件:
connection = sqlite3.connect("test.sqlite")
没有也没关系,执行以上代码,如果数据库文件不存在程序会自动创建它。刚创建的 connection
变量是数据库连接对象。为了能执行数据库 SQL 查询语句,还需要创建一个数据库指针对象:
cursor = connection.cursor()
接下来大部分操作都需要依靠这个 cursor
指针对象了。
先来创建一个产品数据表:
cursor.execute('CREATE TABLE products(name, price)')
往表中添加点数据:
cur.execute("""
INSERT INTO products(name, price) VALUES
('iPhone', 5000),
('MacBook', 10000)
""")
在 SQL 语句中「硬编码」字段值不是什么好注意,以上代码更妥当的写法应该是这样:
cursor.executemany('INSERT INTO products(name, price) VALUES(?, ?)', [
('iPhone', 5000),
('MacBook', 10000),
])
紧接着还需要调用一下数据库连接对象的 commit
方法,否则数据不会保存到数据库文件。
connection.commit()
更新数据的操作基本类似:
cursor.execute('UPDATE products SET name=? WHERE name=?',
('iPhone 14', 'iPhone'))
connection.commit()
还有删除操作:
cursor.execute('DELETE FROM products WHERE name=?',
('iPhone 14', ))
connection.commit()
查询数据库数据有两种方式。第一种是查询并获取单条记录:
result = cursor.execute('SELECT * FROM products WHERE name=?', ('iPhone',))
print(result.fetchone())
第二种是查询并获取多条记录:
result = cursor.execute('SELECT * FROM products')
for rs in result:
print(rs)
以上查询默认会返回如下元组类型的结果:
('iPhone', 5000)
('MacBook', 10000)
如果希望以字典的方式返回结果,可以自定义一下数据库连接对象的 row_factory
属性:
connection.row_factory = lambda cursor, row : {
key: value for key, value in zip(
[col[0] for col in cursor.description], row)
}
再次执行数据查询语句,结果会如下所示:
{'name': 'iPhone', 'price': 5000}
{'name': 'MacBook', 'price': 10000}