Sqlalchemy cx_Oracle create_engine:无法设置arraysize

时间:2015-09-23 13:23:16

标签: python oracle sqlalchemy cx-oracle

基于sqlalchemy文档,我应该可以在cxOracle上设置arraysize。但是将其设置为create_engine arg并不起作用: http://docs.sqlalchemy.org/en/rel_0_9/dialects/oracle.html#dialect-oracle-cx_oracle-connect

import sqlalchemy
    url = sqlalchemy.engine.url.make_url(r'oracle+cx_oracle://user:pass@host:port/dbname') # replaced with appropriate db connection
    engine = sqlalchemy.create_engine(url, arraysize=50000)
    cursor = engine.raw_connection().cursor()
    print cursor.arraysize
    #still only 50

即使在连接字符串中设置它也不起作用:

import sqlalchemy
url = sqlalchemy.engine.url.make_url(r'r'oracle+cx_oracle://user:pass@host:port/dbname?arraysize=5000')
engine = sqlalchemy.create_engine(url)
cursor = engine.raw_connection().cursor()
print cursor.arraysize
我正在做些蠢事吗?或者有人发布了一个在引擎级别成功设置数组大小的片段。

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是你正在围绕SQLAlchemy获取的常规机制进行最终运行,并将光标配置为自己使用。通过使用raw_connection,您可以直接从底层数据库驱动程序(cx_oracle)获取游标,默认为50的arraysize。如果您使用的是某些“常用”SQLAlchemy对象(例如,从引擎获取连接并在其上调用execute,然后您将通过https://github.com/zzzeek/sqlalchemy/blob/rel_0_9_10/lib/sqlalchemy/dialects/oracle/cx_oracle.py#L526处的代码路径,这确实将光标上的传入arraysize设置为SQLAlchemy会使用。