[英]check if query exists using peewee
我在Python中使用Peewee库,我想检查查询是否存在。 我不希望创建一条不存在的记录,因此我不想使用get_or_create。 必须有比使用try / except与get更好的解决方案,但我什么也没看到。 如果有更好的方法,请告诉我。 谢谢。
您可以使用.exists()
:
query = User.select().where(User.username == 'charlie')
if query.exists():
# A user named "charlie" exists.
cool()
http://docs.peewee-orm.com/zh-CN/latest/peewee/api.html?highlight=exists#SelectBase.exists
另外,如果要检查是否有其他表引用了该记录,则可以使用WHERE EXISTS (subquery)
子句。 PeeWee本身不支持它,但是可以很容易地构造它:
subquery = Child.select(Param('1')).where(Child.parent == Parent.id)
parents_with_children = Parent.select().where(
Clause(SQL('EXISTS'), subquery))
它等效于以下SQL:
SELECT * FROM parent
WHERE EXISTS (SELECT 1 FROM child
WHERE child.parent_id = parent.id);
在这里,我child.id
查询使用SELECT 1
以避免获取不需要的信息(例如child.id
)。 不确定是否确实需要这种优化。
如果您只需要检查是否存在,请使用接受的答案。
如果要使用记录(如果存在),则可以使用Model.get_or_none(),因为这样就无需使用try / catch,并且如果记录不存在也不会创建记录。
class User(peewee.Model):
username = peewee.CharField(unique=True)
user = User.get_or_none(username='charlie')
if user is not None:
# found user, do something with it
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.