是否有一个常量时间操作来确定select语句中的结果对象是否有任何行?

时间:2014-01-04 06:50:45

标签: sqlite sqlalchemy

我正在使用sqlalchemy的sqlite方言。当我运行以下脚本时,我看到文件路径被打印出来但result.lastrowidresult.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语句是否不返回任何行?

1 个答案:

答案 0 :(得分:1)

lastrowid仅用于INSERT语句; rowcount仅用于UPDATE / DELETE语句。

结果行是动态计算的;如果没有实际尝试获取结果行,则无法检查结果行。

您必须致电fetchone()并检查结果。 (这有副作用,即已经提取了第一个结果行,因此如果要读取第一行,则不能再获取以下代码。)