我在Python中使用Peewee库,我想检查是否存在查询。我不想创建一个记录,如果它不存在,所以我不想使用get_or_create。必须有一个更好的解决方案,而不是使用try / except with get但我没有看到任何东西。如果有更好的方法,请告诉我。谢谢。
答案 0 :(得分:23)
您可以使用.exists()
:
query = User.select().where(User.username == 'charlie')
if query.exists():
# A user named "charlie" exists.
cool()
http://docs.peewee-orm.com/en/latest/peewee/api.html?highlight=exists#SelectQuery.exists
答案 1 :(得分:2)
或者,如果您想检查是否其他一些表引用此记录,可以使用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);
这里我使用SELECT 1
来查询子查询,以避免获取不需要的信息(如child.id
)。不确定是否真的需要这样的优化。
答案 2 :(得分:0)
使用Model.get_or_none()(这是一种较新的api)
class User(peewee.Model):
username = peewee.CharField(unique=True)
user = User.get_or_none(username='charlie')
if user is not None:
# found user
pass