Python 如何知道炼金术中是否存在记录

Python 如何知道炼金术中是否存在记录,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,假设我有一个名为person的表,当我想知道id=1的记录是否存在时,我将尝试以下代码 if Person.query.filter_by(id = 1).count() > 0: do_something() 问题是,当没有id=1的记录时,sqlalchemy只会抛出一个操作错误,而不是返回0。当捕捉到操作错误时,是否意味着计数为0?换言之,我应该按以下方式做: try: if Person.query.filter_by(id = 1).count() > 0

假设我有一个名为
person
的表,当我想知道
id=1
的记录是否存在时,我将尝试以下代码

if Person.query.filter_by(id = 1).count() > 0:
    do_something()
问题是,当没有id=1的记录时,
sqlalchemy
只会抛出一个
操作错误,而不是返回0。当捕捉到操作错误时,是否意味着计数为0?换言之,我应该按以下方式做:

try:
    if Person.query.filter_by(id = 1).count() > 0:
        do_something_when_record_exists()
except OperationalError:
    do_something_when_theres_no_record()
finally:
    other_code()

对我来说,这似乎不是一种优雅的方式。那么有没有更好的方法来实现它呢?

一个更简单的方法是

from sqlalchemy.sql import exists
    if if session.query(exists().where(Person.id == 1)).scalar() is not None: #check if id=1 exists
            do_something_when_record_exists()
    else:#else run when no record is present
        do_something_when_theres_no_record()
    other_code()#run it anyway

您不需要使用
count
来检查它是否存在。您可以这样做:

if Person.query.get(1):
    do something()
如果没有id为1的记录,它将返回
None
。对于其他条件:

# filter_by(name='Nancy') for example
if Person.query.filter_by(id=1).first():
    do something()

结果发现数据库与我的模型不一致,我删除了数据库并重新创建了表,然后一切正常


如果一切正常,
Person.query.filter\u by(id=1).count()
应该返回
0
,而不是在没有记录的情况下抛出错误。

但是
Person.query.filter\u by(id=1).count()
会抛出一个错误,阻止其余的代码返回running@Searene编辑了答案,,请你现在检查一下对不起,我创建了一个最小的应用程序,我发现我无法重现它的问题。所以我想知道我原来的应用程序出了什么问题。也许这不是炼金术的问题。