繁体   English   中英

使用peewee检查查询是否存在

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM