我正在使用sqlalchemy的sqlite方言。当我运行以下脚本时,我看到文件路径被打印出来但result.lastrowid
和result.rowcount
分别打印了值None
和-1
from sqlalchemy import create_engine, select
from create_database import files
engine = create_engine('sqlite:///test.db', echo=True)
conn = engine.connect()
s = select([files.c.full_path, files.c.file_name])
result = conn.execute(s)
for row in result:
print row[files.c.full_path]
print result.lastrowid
print result.rowcount
result.close()
为什么当结果集中有行时,这些方法会返回None
和-1
?
是否有一个常量时间操作来确定SELECT语句是否不返回任何行?
答案 0 :(得分:1)
lastrowid
仅用于INSERT
语句; rowcount
仅用于UPDATE
/ DELETE
语句。
结果行是动态计算的;如果没有实际尝试获取结果行,则无法检查结果行。
您必须致电fetchone()
并检查结果。
(这有副作用,即已经提取了第一个结果行,因此如果要读取第一行,则不能再获取以下代码。)