python 中使用 SQLite

SQLite 是一款轻量级的关系型数据库,相比 MySQL 等 CS 模式的数据库,SQLite 有以下特点: - 不需要一个单独的服务器进程或操作的系统(无服务器的)。 - SQLite 不需要配置,这意味着不需要安装或管理。 - SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于 250KiB。 - 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。 - SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。 这里科普一下 ACID 的定义,摘自维基百科

ACID,是指数据库管理系统(DBMS)在写入 / 更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。 隔离性:数据库允许多个并发事务同时对齐数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

由于 SQLite 本身是 C 写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在 iOS 和 Android 的 App 中都可以集成。

Python 就内置了 SQLite3,所以,在 Python 中使用 SQLite,不需要安装任何东西,直接使用。

python 中使用 SQLite 的步骤与使用 MySQL 的步骤非常类似,主要分为下面三步:

1. 获取连接 2. 获取游标 3. 执行语句并提交事务

下面是操作 SQLite 的一个简单例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3

DB = 'test.db'
try:
conn = sqlite3.connect(DB)
cursor = conn.cursor()
cursor.execute('create table student(id varchar(10),name varchar(20))')
cursor.execute('insert into student values("2012","lc")')
cursor.execute('select * from student where name=?',('lc',))
result = cursor.fetchall()
for row in result:
print row
except sqlite3.Error as e:
print e
finally:
cursor.close()
conn.commit()
conn.close()

以下几点将有助于更好地理解上面的代码:

  • 由于 SQLite 是一个嵌入式的本地数据库,所以连接时不需要指定服务器地址、用户等。只需要通过 sqlite3.connect(DB) 便可连接数据库 DB,假如没有该数据库时会自动创建。
  • 由于 SQLite 是关系型数据库,所以绝大部分的 SQL 语句规范与 MySQL 等类似
  • 如果执行的 SQL 语句需要从外部传入变量,则需要在 SQL 语句中将变量替换成, 并在 execute 方法增加第二个参数(tuple 类型)
  • fetchall() 会返回一个 list,list 中的每个元素都是一个 tuple,代表数据库中的一行记录
  • 执行完语句后需要关闭 cursor 和 conn,并且在关闭 conn 前需要进行 commit (), 否则修改不会生效