DBAPI说明

DBAPI在中定义 PEP 249 。本节介绍APSW如何与之兼容或不同。

模块接口

没有连接方法。使用 Connection 而是使用构造函数。

Connection对象和任何游标可以在任何线程中使用。不能在多个线程中同时使用游标,例如调用 Cursor.execute() 在同一时间。如果您尝试这样做,则会出现一个 exception 将会被唤醒。在所有SQLite API调用期间都会释放Python全局解释器锁(GIL),从而实现最大的并发性。

支持三种不同的参数样式。请注意,使用SQLite时,参数编号从1而不是0开始 qmark/numeric 风格。

Qmark

... WHERE name=?

数值型

... WHERE name=?4

名为

... WHERE name=:name
... WHERE name=$name
... WHERE name=@name

不使用DBAPI异常。这个 exceptions 使用对应于特定的SQLite错误代码。

连接对象

没有提交或回滚方法。您应该使用 Cursor.execute() 使用 BEGIN and COMMIT or ROLLBACK as appropriate. The SQLite documentation has more details. In particular note that SQLite does not support nested transactions, using BEGIN. You can use savepoints 要获取嵌套事务,请执行以下操作 with Connection 的确如此。

在DBAPI中定义为在游标上的几个方法位于Connection对象上,因为这是SQLite实际存储信息的位置。在附加到同一连接对象的任何其他游标中执行操作确实会更新它们的值,这会让您意识到这一点。

光标对象

使用 Cursor.getdescription() 而不是描述。此信息仅在请求时才能获得。

没有行数。在SQLite中,行计数无论如何都没有意义。SQLite一次返回一行结果,直到您请求才计算下一个结果行。因此,获取行数将必须计算所有结果行,并且不会减少所需的工作量。

由于SQLite不支持存储过程,因此不实现allproc。

execute() 返回游标对象,您可以将其用作迭代器以获得结果(如果有的话)。

executemany() 返回游标对象,您可以将其用作迭代器以获得结果(如果有的话)。

Fetchone不可用。将游标用作迭代器,或调用Python的 next function 才能坐下一排。

FetchMy不可用。使用 fetchall() 以获得所有剩余的结果。

NextSet不适用或不实现。

阵列大小不可用,因为FetchMy不可用。

Setinputizes和setoutputsize都不适用或实现。

键入对象

由于SQLite 3没有本机日期或时间类型,因此没有可用的日期或时间方法。确实有 functions 用于操作日期和时间,它们表示为字符串或 Julian days (浮点数)。

对BLOB使用标准字节类型。

可选的数据库API扩展

行号不可用。

异常类不能作为连接的属性使用,而是在 apsw 模块。看见 例外情况和错误 了解更多详细信息。

使用 Cursor.connection 若要从游标获取关联的连接对象,请执行以下操作。

滚动和消息不可用。

Cursor对象支持迭代器协议,这是获取信息的唯一方法。

若要获取最后插入的行ID,请调用 Connection.last_insert_rowid() 。它存储与连接关联的任何游标上最后一次插入的ID。您还可以添加 select last_insert_rowid() 在EXECUTE语句的末尾:

for row in cursor.execute("BEGIN; INSERT ... ; INSERT ... ; SELECT last_insert_rowid(); COMMIT"):
   lastrowid=row[0]

没有错误处理程序属性。