sqlalchemy+cx_Oracle 可能不在您的域中。但是,如果您能帮我提供一些网络链接/帮助,那就太好了。
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)
但它会返回 0。为什么?
因为仅在UPDATE或DELETE语句中有用。与 Python DBAPI 所说的相反,它不会从SELECT语句的结果中返回可用的行数,因为当行未缓冲时,DBAPI 无法支持此功能。
如何获取SELECT语句的行数?
您可以通过这种方式SELECT与COUNT:
result = connection.execute(tbl_mgr_theater.select().count())
它将返回一个 ResultProxy。但是如果你想要一个 int 结果,你可以这样做:
result=[x for x in connection.execute(tbl_mgr_theater.select().count())][0][0]
如您所知,这是一个SELECT COUNT语句(它只会返回一个字段),您可以设置第一个[0],第二个是将 RowProxy 解析为 int。
希望对你有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句