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

SQLAlchemy 1.1文档

甲骨文¶ T0>

支持Oracle数据库。

DBAPI支持

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

连接参数

The dialect supports several create_engine() arguments which affect the behavior of the dialect regardless of driver in use.

  • use_ansi - 使用ANSI JOIN结构(请参阅Oracle 8一节)。默认为True如果False,则Oracle-8兼容构造用于连接。
  • optimize_limits - 默认为False参见LIMIT / OFFSET部分。
  • use_binds_for_limits - 默认为True参见LIMIT / OFFSET部分。

自动递增行为

包含整数主键的SQLAlchemy表对象通常被认为具有“自动增量”行为,这意味着在INSERT时它们可以生成自己的主键值。由于Oracle没有“自动增量”功能,SQLAlchemy依赖序列来产生这些值。With the Oracle dialect, a sequence must always be explicitly specified to enable autoincrement. 这与假定使用自动增量数据库的大多数文档示例是不同的。要指定序列,请使用传递给Column构造的sqlalchemy.schema.Sequence对象:

t = Table('mytable', metadata,
      Column('id', Integer, Sequence('id_seq'), primary_key=True),
      Column(...), ...
)

当使用表反射时,这一步也是必需的,即autoload = True:

t = Table('mytable', metadata,
      Column('id', Integer, Sequence('id_seq'), primary_key=True),
      autoload=True
)

标识符套管

在Oracle中,数据字典使用大写文本表示所有不区分大小写的标识符名称。另一方面,SQLAlchemy认为全小写的标识符名称不区分大小写。在模式级通信期间,Oracle方言将所有不区分大小写的标识符转换为和来自这两种格式,例如表和索引的反映。在SQLAlchemy侧使用大写名称表示区分大小写的标识符,SQLAlchemy将引用名称 - 这将导致从Oracle接收到的数据字典数据不匹配,所以除非标识符名称已经真正创建为区分大小写(即使用带引号的名称) ,所有小写的名字应该用在SQLAlchemy方面。

支持限制/偏移

Oracle不支持LIMIT或OFFSET关键字。SQLAlchemy使用与ROWNUM结合的包装子查询方法。The exact methodology is taken from http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html .

有两个选项影响其行为:

  • “FIRST ROWS()”优化关键字默认不使用。要启用此优化指令,请指定optimize_limits=Truecreate_engine()
  • 为限制/偏移量传递的值作为绑定参数发送。一些用户已经观察到,如果值作为绑定发送,而不是逐字地呈现,那么Oracle会产生一个糟糕的查询计划。要在SQL语句中逐字地显示限制/偏移量值,请将use_binds_for_limits=False指定为create_engine()

当使用完全不同的窗口查询方法(即ROW_NUMBER()OVER(ORDER BY))来提供LIMIT / OFFSET(注意大多数用户没有注意到这一点)时,一些用户报告了更好的性能。为了适应这种情况,用于LIMIT / OFFSET的方法可以完全替换。请参阅http://www.sqlalchemy.org/trac/wiki/UsageRecipes/WindowFunctionsByDefault中的配方,该配置安装了一个选择编译器,该选择编译器使用窗口函数替代限制/偏移的生成。

返回支持

Oracle数据库支持有限形式的RETURNING,以便从INSERT,UPDATE和DELETE语句中检索匹配行的结果集。Oracle的RETURNING..INTO语法只支持返回一行,因为它依赖OUT参数才能正常工作。另外,受支持的DBAPI还有其他限制(请参阅RETURNING Support)。

SQLAlchemy的“隐式返回”功能通常在Oracle后端启用,它在INSERT中使用RETURNING,有时使用UPDATE语句来获取新生成的主键值和其他SQL默认值和表达式。默认情况下,“隐式返回”通常只会获取嵌入到INSERT中的单个nextval(some_seq)表达式的值,以便在INSERT语句中增加一个序列,并同时返回值。要全面禁用此功能,请将implicit_returning=False指定为create_engine()

engine = create_engine("oracle://scott:tiger@dsn",
                       implicit_returning=False)

隐式返回也可以作为表选项在表中逐个禁用:

# Core Table
my_table = Table("my_table", metadata, ..., implicit_returning=False)


# declarative
class MyClass(Base):
    __tablename__ = 'my_table'
    __table_args__ = {"implicit_returning": False}

也可以看看

RETURNING Support - additional cx_oracle-specific restrictions on implicit returning.

ON UPDATE CASCADE

Oracle没有本地ON UPDATE CASCADE功能。基于触发器的解决方案可以在http://asktom.oracle.com/tkyte/update_cascade/index.html上找到。

使用SQLAlchemy ORM时,ORM手动发布级联更新的能力有限 - 使用“deferrable = True”,“initial”,“deferred”关键字参数指定ForeignKey对象,并在每个关系()上指定“passive_updates = False”。

Oracle 8兼容性

当检测到Oracle 8时,方言在内部将其自身配置为以下行为:

  • use_ansi标志被设置为False。这有将所有JOIN短语转换为WHERE子句的效果,在LEFT OUTER JOIN使用Oracle的(+)运算符的情况下。
  • 当使用Unicode时,NVARCHAR2和NCLOB数据类型不再生成为DDL - 而是发出VARCHAR2和CLOB。这是因为这些类型在Oracle 8上似乎没有正常工作,即使它们可用。NVARCHARNCLOB类型将始终生成NVARCHAR2和NCLOB。
  • 当使用cx_oracle时,“本地unicode”模式被禁用,即,SQLAlchemy在将所有Python unicode对象作为绑定参数传入之前将其编码为“string”。

日期时间兼容性

Oracle没有称为DATETIME的数据类型,它只有DATE,它实际上可以存储日期和时间值。出于这个原因,Oracle方言提供了一个oracle.DATE类型,它是DateTime的一个子类。这种类型没有特殊的行为,只是作为这种类型的“标记”而存在;此外,当反映数据库列并将类型报告为DATE时,将使用支持时间的oracle.DATE类型。

在版本0.9.4中更改:oracle.DATE添加到DateTime子类。这是一个变化,因为以前的版本会将DATE列反映为types.DATE,它是Date的子类。这里唯一的意义是检查在特殊Python翻译中使用的列的类型或者将模式迁移到其他数据库后端的方案。

Oracle表选项

CREATE TABLE短语与Oracle结合使用Table结构支持以下选项:

  • ON COMMIT

    Table(
        "some_table", metadata, ...,
        prefixes=['GLOBAL TEMPORARY'], oracle_on_commit='PRESERVE ROWS')

版本1.0.0中的新功能

  • COMPRESS

     Table('mytable', metadata, Column('data', String(32)),
         oracle_compress=True)
    
     Table('mytable', metadata, Column('data', String(32)),
         oracle_compress=6)
    
    The ``oracle_compress`` parameter accepts either an integer compression
    level, or ``True`` to use the default compression level.

版本1.0.0中的新功能

Oracle特定索引选项

位图索引

您可以指定oracle_bitmap参数来创建位图索引而不是B树索引:

Index('my_index', my_table.c.data, oracle_bitmap=True)

位图索引不能是唯一的,不能被压缩。SQLAlchemy不会检查这样的限制,只有数据库会。

版本1.0.0中的新功能

索引压缩

对于包含大量重复值的索引,Oracle具有更高效的存储模式。使用oracle_compress参数打开密钥:

Index('my_index', my_table.c.data, oracle_compress=True)

Index('my_index', my_table.c.data1, my_table.c.data2, unique=True,
       oracle_compress=1)

oracle_compress参数接受一个指定要压缩的前缀列的数量的整数,或者接受True来使用默认值(非唯一索引的所有列,除最后一列之外的所有列为唯一索引)。

版本1.0.0中的新功能

Oracle数据类型

与所有的SQLAlchemy方言一样,所有已知可用于Oracle的UPPERCASE类型都可以从顶级方言导入,无论它们源自sqlalchemy.types还是来自当地方言:

from sqlalchemy.dialects.oracle import \
            BFILE, BLOB, CHAR, CLOB, DATE, \
            DOUBLE_PRECISION, FLOAT, INTERVAL, LONG, NCLOB, \
            NUMBER, NVARCHAR, NVARCHAR2, RAW, TIMESTAMP, VARCHAR, \
            VARCHAR2

特定于Oracle的类型,或具有特定于Oracle的构造参数,如下所示:

class sqlalchemy.dialects.oracle.BFILE(length=None)

基础:sqlalchemy.types.LargeBinary

__初始化__ T0> ( T1> 长度=无 T2> ) T3> ¶ T4>
inherited from the __init__() method of LargeBinary

构建一个LargeBinary类型。

参数:length – optional, a length for the column for use in DDL statements, for those binary types that accept a length, such as the MySQL BLOB type.
class sqlalchemy.dialects.oracle.DATE(timezone=False)

基础:sqlalchemy.types.DateTime

提供oracle DATE类型。

这种类型没有特殊的Python行为,除了它的子类types.DateTime;这是为了适应Oracle DATE类型支持时间值的事实。

版本0.9.4中的新功能

__初始化__ T0> ( T1> 时区=假 T2> ) T3> ¶ T4>

构建一个新的DateTime

参数: timezone - 布尔值。如果为True,并由后端支持,则会产生“TIMESTAMP WITH TIMEZONE”。对于不支持时区感知时间戳的后端,不起作用。
class sqlalchemy.dialects.oracle。 DOUBLE_PRECISION precision = None scale = Noneasdecimal = None

基础:sqlalchemy.types.Numeric

class sqlalchemy.dialects.oracle。 INTERVAL day_precision =无 second_precision =无 T5> ) T6> ¶ T7>

基础:sqlalchemy.types.TypeEngine

__init__(day_precision=None, second_precision=None)

构建一个INTERVAL。

请注意,目前只支持DAY TO SECOND间隔。这是由于缺少对可用DBAPI(cx_oracle和zxjdbc)中YEAR TO MONTH间隔的支持。

参数:
  • day_precision – the day precision value. 这是一天数字要存储的位数。默认为“2”
  • second_precision – the second precision value. 这是小数秒字段存储的位数。默认为“6”。
class sqlalchemy.dialects.oracle.NCLOB(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)

基础:sqlalchemy.types.Text

__init__(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)
inherited from the __init__() method of String

创建一个字符串保存类型。

参数:
  • length – optional, a length for the column for use in DDL and CAST expressions. 如果没有CREATE TABLE将被发布,可以安全地省略。某些数据库可能需要用于DDL的length,并且在CREATE TABLE DDL时会引发异常如果包含没有长度的VARCHAR,则发布。值是否被解释为字节或字符是数据库特定的。
  • 整理 -

    可选,用于DDL和CAST表达式的列级别排序规则。呈现使用SQLite,MySQL和Postgresql支持的COLLATE关键字。例如。:

    >>> from sqlalchemy import cast, select, String
    >>> print select([cast('some string', String(collation='utf8'))])
    SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1

    0.8版新增:增加了对所有字符串类型的COLLATE支持。

  • convert_unicode -

    设置为True时,String类型将假定输入将作为Python unicode对象传递,结果以Python unicode对象。If the DBAPI in use does not support Python unicode (which is fewer and fewer these days), SQLAlchemy will encode/decode the value, using the value of the encoding parameter passed to create_engine() as the encoding.

    当使用本地支持Python unicode对象的DBAPI时,通常不需要设置此标志。For columns that are explicitly intended to store non-ASCII data, the Unicode or UnicodeText types should be used regardless, which feature the same behavior of convert_unicode but also indicate an underlying column type that directly supports unicode, such as NVARCHAR.

    For the extremely rare case that Python unicode is to be encoded/decoded by SQLAlchemy on a backend that does natively support Python unicode, the value force can be passed here which will cause SQLAlchemy’s encode/decode services to be used unconditionally.

  • unicode_error - 可选,用于处理Unicode转换错误的方法。行为就像标准库的string.decode()函数的errors关键字参数。此标志要求将convert_unicode设置为force - 否则,SQLAlchemy不能保证处理unicode转换的任务。请注意,此标志为已经返回unicode对象的后端(大多数DBAPI所做的)的行取回操作增加了显着的性能开销。这个标志只能作为从不同的或损坏的编码列读取字符串的最后手段。
class sqlalchemy.dialects.oracle。 NUMBER precision = None scale = Noneasdecimal = None

基础:sqlalchemy.types.Numericsqlalchemy.types.Integer

class sqlalchemy.dialects.oracle.LONG(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)

基础:sqlalchemy.types.Text

__init__(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)
inherited from the __init__() method of String

创建一个字符串保存类型。

参数:
  • length – optional, a length for the column for use in DDL and CAST expressions. 如果没有CREATE TABLE将被发布,可以安全地省略。某些数据库可能需要用于DDL的length,并且在CREATE TABLE DDL时会引发异常如果包含没有长度的VARCHAR,则发布。值是否被解释为字节或字符是数据库特定的。
  • 整理 -

    可选,用于DDL和CAST表达式的列级别排序规则。呈现使用SQLite,MySQL和Postgresql支持的COLLATE关键字。例如。:

    >>> from sqlalchemy import cast, select, String
    >>> print select([cast('some string', String(collation='utf8'))])
    SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1

    0.8版新增:增加了对所有字符串类型的COLLATE支持。

  • convert_unicode -

    设置为True时,String类型将假定输入将作为Python unicode对象传递,结果以Python unicode对象。If the DBAPI in use does not support Python unicode (which is fewer and fewer these days), SQLAlchemy will encode/decode the value, using the value of the encoding parameter passed to create_engine() as the encoding.

    当使用本地支持Python unicode对象的DBAPI时,通常不需要设置此标志。For columns that are explicitly intended to store non-ASCII data, the Unicode or UnicodeText types should be used regardless, which feature the same behavior of convert_unicode but also indicate an underlying column type that directly supports unicode, such as NVARCHAR.

    For the extremely rare case that Python unicode is to be encoded/decoded by SQLAlchemy on a backend that does natively support Python unicode, the value force can be passed here which will cause SQLAlchemy’s encode/decode services to be used unconditionally.

  • unicode_error - 可选,用于处理Unicode转换错误的方法。行为就像标准库的string.decode()函数的errors关键字参数。此标志要求将convert_unicode设置为force - 否则,SQLAlchemy不能保证处理unicode转换的任务。请注意,此标志为已经返回unicode对象的后端(大多数DBAPI所做的)的行取回操作增加了显着的性能开销。这个标志只能作为从不同的或损坏的编码列读取字符串的最后手段。
class sqlalchemy.dialects.oracle。 tt> RAW 长度=无 ) T5> ¶ T6>

基础:sqlalchemy.types._Binary

cx_Oracle ¶ T0>

通过cx-Oracle驱动程序支持Oracle数据库。

DBAPI ¶ T0>

有关cx-Oracle的文档和下载信息(如果适用),请访问:http://cx-oracle.sourceforge.net/

连接¶ T0>

连接字符串:

oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

其他连接参数

dbname连接时,使用cx_oracle makedsn()函数将主机,端口和dbname标记转换为TNS名称。否则,主机令牌直接作为TNS名称。

可以在URL上指定为查询字符串参数或作为create_engine()的关键字参数的附加参数是:

  • allow_twophase - enable two-phase transactions. 默认为True

  • arraysize - set the cx_oracle.arraysize value on cursors, defaulted to 50. 由于LOB对象的内容仅在“实时”行(例如,在一批50行内)中可读,所以该设置对于cx_Oracle是重要的。

  • auto_convert_lobs - 默认为True;请参阅LOB Objects

  • auto_setinputsizes - 为所有绑定参数发出cx_oracle.setinputsizes()调用。这是LOB数据类型所必需的,但可以禁用以减少开销。默认为True可以使用exclude_setinputsizes参数将特定类型从此进程中排除。

  • coerce_to_unicode - 有关详细信息,请参阅Unicode

  • coerce_to_decimal - 详情请参阅Precision Numerics

  • exclude_setinputsizes - a tuple or list of string DBAPI type names to be excluded from the “auto setinputsizes” feature. 此处的类型名称必须与“cx_Oracle”模块名称空间中找到的DBAPI类型匹配,例如cx_Oracle.UNICODE,cx_Oracle.NCLOB等。默认为(STRING, UNICODE)

    版本0.8中的新功能可以通过exclude_setinputsizes属性从auto_setinputsizes功能中排除特定的DBAPI类型。

  • mode - 给出SYSDBA或SYSOPER的字符串值,或者是一个整数值。该值仅作为URL查询字符串参数使用。

  • threaded - 启用对cx_oracle连接的多线程访问。默认为True请注意,这是cx_Oracle DBAPI本身的相反默认值。

  • service_name - 与SERVICE_NAME(而不是SID)一起使用连接字符串(DSN)的选项。当给出database部分时,不能传递它。例如。 oracle+cx_oracle://scott:tiger@host:1521/?service_name=hr是一个有效的url。该值仅作为URL查询字符串参数使用。

    版本1.0.0中的新功能

Unicode的¶ T0>

从版本5开始,cx_Oracle DBAPI完全支持unicode,并且能够以本地方式返回字符串结果作为Python unicode对象。

在Python 3中使用时,cx_Oracle将所有字符串作为Python unicode对象(即Python 3中的plain str)返回。在Python 2中,它将以Python unicode的形式返回那些类型为NVARCHARNCLOB的列值。对于类型为VARCHAR或其他非Unicode字符串类型的列值,它将以Python字符串(例如,字节串)的形式返回值。

cx_Oracle SQLAlchemy方言提供了两个不同的选项,用于在Python 2下将VARCHAR列值作为Python unicode对象返回:

  • cx_Oracle DBAPI能够无条件地使用输出类型处理程序将所有字符串结果强制转换为Python unicode对象。这样做的好处在于,对于cx_Oracle驱动程序级别的所有语句,unicode转换是全局的,这意味着它可以与没有关联输入信息的原始文本SQL语句一起使用。然而,这个系统被认为会产生显着的性能开销,不仅因为它对所有字符串值无条件生效,而且因为在Python 2下的cx_Oracle似乎使用纯Python函数调用来执行解码操作,在cPython下比单独使用C函数要慢几个数量级。
  • SQLAlchemy内置了unicode解码服务,当使用SQLAlchemy的C扩展时,这些函数不会使用任何Python函数调用,而且速度非常快。The disadvantage to this approach is that the unicode conversion only takes effect for statements where the Unicode type or String type with convert_unicode=True is explicitly associated with the result column. 对于任何ORM或核心查询或SQL表达式以及指定输出列类型的text()结构,情况都是如此,所以在绝大多数情况下,这不是问题。However, when sending a completely raw string to Connection.execute(), this typing information isn’t present, unless the string is handled within a text() construct that adds typing information.

从SQLAlchemy 0.9.2版开始,默认的方法是使用SQLAlchemy的输入系统。这使得cx_Oracle的昂贵的Python 2方法被禁用,除非用户明确地需要它。在Python 3下,SQLAlchemy检测到cx_Oracle本地返回unicode对象,并使用cx_Oracle的系统。

要在Python 2下重新启用cx_Oracle的输出类型处理程序,可以将coerce_to_unicode=True标志(0.9.4中的new)传递给create_engine()

engine = create_engine("oracle+cx_oracle://dsn", coerce_to_unicode=True)

另外,要运行一个纯粹的字符串SQL语句并在Python 2下以Python unicode的形式得到VARCHAR结果而不使用cx_Oracle的本地处理程序,可以使用text()

from sqlalchemy import text, Unicode
result = conn.execute(
    text("select username from user").columns(username=Unicode))

版本0.9.2更改: cx_Oracle的输出类型处理程序在被识别为主要的性能瓶颈后,不再用于Python 2中非Unicode数据类型的unicode结果。使用SQLAlchemy自己的unicode工具。

版本0.9.4新增:添加了coerce_to_unicode标志,以重新启用cx_Oracle的outputtypehandler并恢复到0.9.2之前的行为。

返回支持

cx_oracle DBAPI支持Oracle已经有限的RETURNING支持的有限子集。通常,结果只能保证最多返回一列;这是SQLAlchemy使用RETURNING获取主键关联序列值的典型情况。由于cx_oracle缺少对更复杂的RETURNING场景所需的OCI_DATA_AT_EXEC API的支持,额外的列表达式将以非确定的方式导致问题。

为此,通过完全禁用RETURNING支持可以提高稳定性;否则SQLAlchemy将使用RETURNING来获取新序列生成的主键。RETURNING Support所示:

engine = create_engine("oracle://scott:tiger@dsn",
                       implicit_returning=False)

LOB对象

cx_oracle使用cx_oracle.LOB对象返回Oracle LOB。SQLAlchemy将它们转换为字符串,以便Binary类型的接口与其他后端的接口保持一致,并且在result.fetchmany()和result.fetchall()等场景中不需要与活动光标的链接。这意味着,默认情况下,LOB对象无条件地被SQLAlchemy完全取出,并且与活动光标的链接被中断。

要禁用此处理,请将auto_convert_lobs=False传递给create_engine()

两阶段事务支持

两阶段事务是使用XA事务实现的,并且从SQLAlchemy 0.8.0b2,0.7.10开始,已经以最新版本的cx_Oracle的方式工作。但是,这个机制还没有被认为是有力的,仍然应该被视为实验性的。

特别是最近5.1.2的cx_Oracle DBAPI有一个关于两个阶段的错误,这个阶段阻止了一个特定的DBAPI连接在准备好的事务以及传统的DBAPI使用模式中一致的使用;因此,一旦通过Connection.begin_prepared()使用了特定的连接,底层DBAPI连接的所有后续用法都必须位于准备事务的上下文内。

Engine的默认行为是维护一个DBAPI连接池。因此,由于上述故障,已经在两阶段操作中使用并且然后返回到池的DBAPI连接将不能在非两阶段上下文中使用。为了避免这种情况,应用程序可以做出以下几种选择之一:

  • 使用NullPool禁用连接池
  • 确保正在使用的Engine仅用于两阶段操作。绑定到包含twophase=True的ORM SessionEngine将始终使用两阶段事务样式。
  • 对于特定的两阶段操作而不禁用池,可以使用Connection.detach()方法从连接池中清除正在使用的DBAPI连接。

在0.8.0b2,0.7.10版本中更改:已经执行并测试了对cx_oracle准备事务的支持。

精确数字

SQLAlchemy方言经过很多步骤才能确保十进制数字的发送和接收完全准确。可调用的“outputtypehandler”与每个检测数字类型并将其作为字符串值接收的cx_oracle连接对象关联,而不是直接接收Python float,然后将其传递给Python Decimalcx_oracle方言下面的NumericFloat类型意识到这种行为,并强制Decimalfloat如果asdecimal标志为False(默认在FloatNumeric上可选)。

因为处理程序首先在所有情况下都强制为Decimal,所以该功能会显着影响性能。如果不需要精度数字,则可以通过将标志coerce_to_decimal=False传递给create_engine()来禁用十进制处理:

engine = create_engine("oracle+cx_oracle://dsn", coerce_to_decimal=False)

New in version 0.7.6: Add the coerce_to_decimal flag.

性能的另一种替代方法是使用cdecimal库;有关其他注意事项,请参阅Numeric

处理程序尝试使用结果集列的“精度”和“缩放”属性来最好地确定是否应将后续传入值接收为Decimal而不是int(在这种情况下,不会添加处理)。There are several scenarios where OCI does not provide unambiguous data as to the numeric type, including some situations where individual rows may return a combination of floating point and integer values. 已经观察到“精确度”和“尺度”的某些值来确定这种情况。当它发生时,outputtypehandler接收到一个字符串,然后传递给一个处理函数,该函数检测每个返回值是否存在小数点,如果是,则转换为Decimal,否则转换为int。The intention is that simple int-based statements like “SELECT my_seq.nextval() FROM DUAL” continue to return ints and not Decimal objects, and that any kind of floating point value is received as a string so that there is no floating point loss of precision.

“存在小数点”逻辑本身也对区域设置敏感。OCI下,这由NLS_LANG环境变量控制。在第一次连接时,方言进行测试以确定当前的“十进制”字符,对于欧洲语言环境可以是逗号“,”。从这一点开始,outputTypehandler使用该字符来表示小数点。请注意,在处理使用语言环境设置不使用句点“。”作为十进制字符的数字时,需要cx_oracle 5.0.3或更高版本。

版本0.6.6更改: outputtype处理程序支持locale使用逗号“,”字符表示小数点的情况。

zxjdbc ¶ T0>

通过zxJDBC for Jython驱动程序支持Oracle数据库。

注意

当前版本的SQLAlchemy不支持Jython。zxjdbc方言应该被认为是实验性的。

DBAPI ¶ T0>

此数据库的驱动程序可在以下网址获得:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

连接¶ T0>

连接字符串:

oracle+zxjdbc://user:pass@host/dbname