繁体   English   中英

sqlalchemy cx_oracle无法获得结果

[英]sqlalchemy cx_oracle cannot get results

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())

给出以下错误:

追溯(最近一次调用):TypeError中的文件“”,第1行:'int'对象不可调用错误关闭光标追溯:追溯(最新调用最后一次):AttributeError:'cx_Oracle.Cursor'对象没有属性'lastrowid'

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

print(result.rowcount)

但是它将返回0。 为什么

因为仅在UPDATEDELETE语句中有用。 与Python DBAPI所说的相反,它不返回SELECT语句的结果中可用的行数,因为在对行进行无缓冲时,DBAPI不支持此功能。

如何获得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。

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM