火鸟

优质
小牛编辑
133浏览
2023-12-01

Support for the Firebird database.

The following table summarizes current support levels for database release versions.

数据库接口支持

The following dialect/DBAPI options are available. Please refer to individual DBAPI sections for connect information.

注解

在炼金术中的火鸟方言 当前不支持 . 它没有在持续集成中进行测试,并且可能有许多问题和警告目前尚未处理。考虑使用 external dialect 相反。

1.4 版后已移除: 内部Firebird方言已弃用,将在将来的版本中删除。使用外部方言。

火鸟方言

Firebird提供两种不同的 dialects (不要与一个SQL炼金术混淆 Dialect ):

方言1

这是从Interbase 6.0之前版本继承的旧语法和行为。

方言3

这是Interbase 6.0中引入的更新且受支持的语法。

SQLAlchemy Firebird方言检测这些版本并相应地调整其对SQL的表示。然而,对方言1的支持还没有经过很好的测试,可能有不兼容之处。

锁定行为

火鸟猛烈地锁住桌子。因此,在释放其他事务之前,删除表可能会挂起。SQLAlchemy尽其所能尽快发布事务。挂起事务的最常见原因是非完全消耗的结果集,即:

result = engine.execute(text("select * from table"))
row = result.fetchone()
return

在上面的地方, CursorResult 尚未完全消耗。一旦python垃圾收集器回收保留连接的对象,连接将返回池,事务状态将回滚,而这些对象通常是异步发生的。上述用例可以通过调用 first()CursorResult 它将获取第一行并立即关闭所有剩余的光标/连接资源。

返回支持

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

Support for the Firebird database via the fdb driver.

FDB是一种与Kinterbasdb兼容的火鸟DBAPI。

在 0.9 版更改: -FDB方言现在是 firebird:// URL空间 fdb 现在是火鸟的官方python驱动程序。

DBAPI

Documentation and download information (if applicable) for fdb is available at: https://pypi.org/project/fdb/

Connecting

Connect String:

firebird+fdb://user:password@host:port/path/to/db[?key=value&key=value...]

争论

这个 fdb 方言是基于 sqlalchemy.dialects.firebird.kinterbasdb 然而,方言并不能接受Kinterbasdb所做的每一个论证。

  • enable_rowcount -默认情况下为True,将其设置为False将禁用行计数.cursor“使用Kinterbasdb方言,SQLAlchemy通常在任何UPDATE或DELETE语句后自动调用它。禁用时,SQLAlchemy的CursorResult将为返回-1result.rowcount. 这里的基本原理是,当调用.rowcount时,Kinterbasdb需要对数据库进行第二次往返-由于SQLA的resultproxy在非结果返回语句之后自动关闭游标,因此必须在返回result对象之前调用rowcount(如果有的话)。另外,cursor.rowcount对于旧版本的Firebird可能无法返回正确的结果,并且将此标志设置为False也会导致SQLAlchemy ORM忽略其用法。也可以在每次执行的基础上使用 enable_rowcount 选项与 Connection.execution_options() ::

    conn = engine.connect().execution_options(enable_rowcount=True)
    r = conn.execute(stmt)
    print(r.rowcount)
  • retaining -默认为false。将此设置为true将通过 retaining=True 关键字参数 .commit().rollback() DBAPI连接的方法,在某些情况下可以提高性能,但明显需要注意。请阅读FDB和/或KinterbasDB DBAPI文档,以了解此标志的含义。

    在 0.9.0 版更改: - the retaining flag defaults to False. In 0.8 it defaulted to True.

    参见

    https://pythonhosted.org/fdb/usage-guide.html-有关“保留”标志的信息。

肯特巴斯德

Support for the Firebird database via the kinterbasdb driver.

DBAPI

Documentation and download information (if applicable) for kinterbasdb is available at: https://firebirdsql.org/index.php?op=devel&sub=python

Connecting

Connect String:

firebird+kinterbasdb://user:password@host:port/path/to/db[?key=value&key=value...]

争论

kinterbasdb后端接受 enable_rowcountretaining 被接受的参数 sqlalchemy.dialects.firebird.fdb 方言。此外,它还接受以下内容:

  • type_conv -选择在类型上完成的映射类型:默认情况下,SQLAlchemy使用具有Unicode、日期时间和十进制支持的200。有关详细信息,请参阅下面的链接文档。

  • concurrency_level -针对线程问题设置后端策略:默认情况下,SQLAlchemy使用策略1。有关详细信息,请参阅下面的链接文档。

参见

https://sourceforge.net/projects/kinterbasdb

https://kinterbasdb.sourceforge.net/dist_docs/usage.html

https://kinterbasdb.sourceforge.net/dist_docs/usage.html