sqlalchemy cx_oracle无法获得结果

时间:2018-07-05 12:21:17

标签: python database sqlalchemy cx-oracle

sqlalchemy + cx_Oracle可能不在您的域中。 但是,如果您能帮助我,提供很少的Web链接/帮助会很好。

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行,位于 TypeError:“ int”对象不可调用 关闭游标时出错 追溯(最近一次通话): AttributeError:“ cx_Oracle.Cursor”对象没有属性“ lastrowid”

1 个答案:

答案 0 :(得分:0)

首先,rowcount是一个属性,因此您可以通过以下方式使用它:

print(result.rowcount)

但是它将返回0。为什么

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

如何获取 SELECT 语句的行数?

您可以通过以下方式对 COUNT 进行 SELECT

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

它将返回一个ResultProxy。但是,如果您想要一个整数结果,则可以执行以下操作:

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

您知道的是 SELECT COUNT 语句(它将仅返回一个字段),您可以设置第一个 [0] ,第二个是解析RowProxy诠释。

希望它对您有帮助。