簡體   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