sqlalchemy cx_oracle 无法获取结果

sqlalchemy cx_oracle cannot get results

sqlalchemy+cx_Oracle 可能不在您的域中。 不过,如果你能帮我给几个网站 links/helps 就好了。

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy import Table
import cx_Oracle

engine = create_engine('oracle+cx_oracle://user:passwd@FTSDBLAB')
meta = MetaData()
meta.reflect(bind=engine)
tbl_mgr_theater = Table('mgr_table', meta, autoload=True, autoload_with=engine)

connection = engine.connect()
result = connection.execute(tbl_mgr_theater.select())

print(result.rowcount())

给出以下错误:

回溯(最近调用最后): 文件“”,第 1 行,位于 类型错误:'int' 对象不可调用 关闭游标时出错 追溯(最近一次通话): AttributeError: 'cx_Oracle.Cursor' 对象没有属性 'lastrowid'

首先,rowcount是一个属性,所以你应该这样使用:

print(result.rowcount)

但它会 return 0。为什么

Because 仅在 UPDATEDELETE 语句中有用。与 Python DBAPI 所说的相反,它不会 return SELECT 语句结果中可用的行数,因为 DBAPI 无法支持当行未缓冲时此功能。

如何获取 SELECT 语句的行数?

您可以 SELECTCOUNT 这样:

result = connection.execute(tbl_mgr_theater.select().count())

它将return 一个ResultProxy。但是如果你想要一个 int 结果,你可以这样做:

result=[x for x in connection.execute(tbl_mgr_theater.select().count())][0][0]

如你所知,这是一个 SELECT COUNT 语句(它只会 return 一个字段),你可以设置第一个 [0],二是将RowProxy解析为int.

希望对你有帮助。