版本:1.1.0b2 |发布日期:2016年7月1日

SQLAlchemy 1.1文档

火鸟¶ T0>

支持Firebird数据库。

DBAPI支持

以下dialect / DBAPI选项可用。有关连接信息,请参阅各个DBAPI部分。

火鸟方言

Firebird offers two distinct dialects (not to be confused with a SQLAlchemy Dialect):

方言1
这是继6.0之前从Interbase继承而来的旧语法和行为。
方言3
这是Interbase 6.0中引入的更新和支持的语法。

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 ¶ T0>

通过fdb驱动程序支持Firebird数据库。

fdb是Firebird的一个兼容kinterbasdb的DBAPI。

0.8版新增功能: - 支持fdb Firebird驱动程序。

在0.9版中改变: - fdb方言现在是firebird:// URL空间下的默认方言,因为fdb现在是官方Firebird的Python驱动程序。

DBAPI ¶ T0>

fdb的文档和下载信息(如适用)可在以下网址获得:http://pypi.python.org/pypi/fdb/

连接¶ T0>

连接字符串:

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

参数¶ T0>

fdb方言基于sqlalchemy.dialects.firebird.kinterbasdb方言,但不接受Kinterbasdb所做的每个参数。

  • enable_rowcount - 默认情况下,将其设置为False将禁用Kinterbasdb方言中的“cursor.rowcount”的使用,SQLAlchemy在任何UPDATE或DELETE语句后通常会自动调用该方法。禁用时,SQLAlchemy的ResultProxy将为result.rowcount返回-1。这里的理由是,Kinterbasdb需要第二个往返到数据库时.rowcount被称为 - 因为SQLA的resultproxy自动关闭无结果,返回语句后游标,行数必须被调用,如果有的话,之前的结果对象回。此外,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 ¶ T0>

通过kinterbasdb驱动程序支持Firebird数据库。

DBAPI ¶ T0>

文档和下载信息(如果适用)kinterbasdb可在以下网址获得:http://firebirdsql.org/index.php?op=devel&sub=python

连接¶ T0>

连接字符串:

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

参数¶ T0>

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

  • type_conv - select the kind of mapping done on the types: by default SQLAlchemy uses 200 with Unicode, datetime and decimal support. 有关更多信息,请参阅下面的链接文档。
  • concurrency_level - set the backend policy with regards to threading issues: by default SQLAlchemy uses policy 1. 有关更多信息,请参阅下面的链接文档。