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编辑了答案,,请你现在检查一下对不起,我创建了一个最小的应用程序,我发现我无法重现它的问题。所以我想知道我原来的应用程序出了什么问题。也许这不是炼金术的问题。