Python 返回\u行属性不起作用-SQLAlchemy

Python 返回\u行属性不起作用-SQLAlchemy,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我试图通过数据库中的id值选择一行,并使用ResultProxy类的returns\u rowsattribute检查在调用fetchone之前是否返回了一行 为此,我编写了以下代码: book = db.execute("SELECT * FROM books WHERE isbn=:isbn", {"isbn": id}) if book.returns_rows is not True: return "Not found." book = book.fetchone() // .

我试图通过数据库中的id值选择一行,并使用ResultProxy类的returns\u rowsattribute检查在调用fetchone之前是否返回了一行

为此,我编写了以下代码:

book = db.execute("SELECT * FROM books WHERE isbn=:isbn", {"isbn": id})
if book.returns_rows is not True:
    return "Not found."
book = book.fetchone()
// ...
根据,如果至少返回一行,则应该返回True。但是,即使数据库中不存在id值,if语句也不会计算为true

有人能帮我理解为什么会这样吗?提前感谢。

使用游标。取而代之的是fetchone不是None:


离题:如果var为非真,则使用if-not-var:I&39;我试过了,但我改成了这样,因为当从DB返回行时,文档只清楚返回行的值。在本例中,返回行=True。但是谢谢你的帮助。我想应该有对文档的误读。returns_rows实现取决于游标的下移,正如文档所说,在构造UPDATE语句时立即释放游标。行耗尽时,也会释放基础游标。但我不确定这会发生在你尝试取回之前。你有没有试过检查那本书是否为None而不是book.returns\u rows不是真的?@nutic我试过了,它工作正常。但是我想知道为什么这个属性在我的if语句中不起作用。我还不太了解数据库,但我是否需要手动使用游标将此属性设置为True?我之所以问这个问题,是因为我尝试将它与UPDATE语句一起使用,但它也不起作用。我不确定我做错了什么。在文档中,我仅在ResultProxy返回行时才看到这一点。但是感谢您的帮助。根据实现,当db游标打开时,返回_rows=True,这意味着您可以尝试从此游标获取一些数据。但除非您尝试获取数据,否则无法保证有任何数据可获取。至于您的问题,我不建议手动触摸底层游标,因为SQLAlchemy应该封装它,fetch*方法应该足以满足您的需要。
book = db.execute("SELECT * FROM books WHERE isbn=:isbn", {"isbn": id})
book = book.fetchone()
if book is None:
    return "Not found."