zzxworld

使用 Python 操作 SQLite 数据库

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}