Firebird提供两种不同的方言(不要与SQLAlchemy Dialect
):
SQLAlchemy Firebird方言检测这些版本并相应地调整其SQL表示。然而,对方言1的支持没有得到很好的测试,可能有不相容的地方。
Firebird积极锁定表格。出于这个原因,DROP TABLE可能会挂起,直到其他事务被释放。SQLAlchemy尽可能快地释放事务。挂起交易的最常见原因是未完全消费的结果集,即:
result = engine.execute("select * from table")
row = result.fetchone()
return
如上所述,ResultProxy
尚未完全消耗。连接将返回到池中,并且一旦Python垃圾回收器回收持有连接的对象(通常异步发生),事务状态就会回滚。可以通过在ResultProxy
上调用first()
来缓解上述用例,该操作将获取第一行并立即关闭所有剩余的游标/连接资源。
Firebird 2.0支持从插入返回结果集,并且2.1扩展了它以删除和更新。这通常由SQLAlchemy returning()
方法公开,例如:
# INSERT..RETURNING
result = table.insert().returning(table.c.col1, table.c.col2).\
values(name='foo')
print result.fetchall()
# UPDATE..RETURNING
raises = empl.update().returning(empl.c.id, empl.c.salary).\
where(empl.c.sales>100).\
values(dict(salary=empl.c.salary * 1.1))
print raises.fetchall()
通过fdb驱动程序支持Firebird数据库。
fdb是Firebird的兼容kinterbasdb的DBAPI。
0.8版新增功能: - 支持fdb Firebird驱动程序。
在版本0.9中更改: - fdb方言现在是firebird://
URL空间下的默认方言,因为fdb
现在是官方Firebird的Python驱动程序。
fdb的文档和下载信息(如果适用)可在以下网址获得:http://pypi.python.org/pypi/fdb/
fdb
方言基于sqlalchemy.dialects.firebird.kinterbasdb
方言,但不接受Kinterbasdb所做的每个参数。
enable_rowcount
- 默认情况下,将其设置为False时,将禁用使用Kinterbasdb方言的“cursor.rowcount”,SQLAlchemy通常在任何UPDATE或DELETE语句后自动调用。禁用时,SQLAlchemy的ResultProxy将为result.rowcount返回-1。这里的基本原理是,当调用.rowcount时,Kinterbasdb需要第二次往返数据库 - 因为SQLA的resultproxy在非结果返回语句后自动关闭游标,因此必须调用rowcount(如果有的话),在结果对象之前回。此外,cursor.rowcount可能不会在旧版Firebird中返回正确结果,并将此标志设置为False也会导致SQLAlchemy ORM忽略其使用情况。该行为还可以通过Connection.execution_options()
使用enable_rowcount
选项以每个执行为基础进行控制:
conn = engine.connect().execution_options(enable_rowcount=True)
r = conn.execute(stmt)
print r.rowcount
retaining
- 默认为False。将此设置为True会将retaining=True
关键字参数传递给DBAPI连接的.commit()
和.rollback()
这可以在某些情况下提高性能,但显然有重大警告。请阅读fdb和/或kinterbasdb DBAPI文档以了解此标志的含义。
0.8.2版新增: - retaining
关键字参数 - 在0.8中,为了向后兼容,默认为True
。
版本0.9.0更改: - retaining
标志默认为False
。在0.8中,默认为True
。
也可以看看
http://pythonhosted.org/fdb/usage-guide.html#retaining-transactions - 有关“保留”标志的信息。
通过kinterbasdb驱动程序支持Firebird数据库。
文档和下载信息(如果适用)kinterbasdb可在以下网址获得:http://firebirdsql.org/index.php?op=devel&;sub=python
Kinterbasdb后端接受sqlalchemy.dialects.firebird.fdb
方言接受的enable_rowcount
和retaining
参数。另外,它还接受以下内容:
type_conv
- 选择在类型上完成的映射种类:默认情况下,SQLAlchemy使用200,Unicode,datetime和decimal支持。请参阅下面的链接文件以获取更多信息。concurrency_level
- 根据线程问题设置后端策略:默认情况下,SQLAlchemy使用策略1。请参阅下面的链接文件以获取更多信息。