【发布时间】:2012-03-22 14:32:27
【问题描述】:
我想检查数据库中的行是否已包含特定输入。如果它已经存在,请阻止它再次添加,如果没有,则像往常一样添加它。
如何在不将所有内容从数据库中提取出来进行检查的情况下询问数据库是否存在?
【问题讨论】:
标签: python database django postgresql
我想检查数据库中的行是否已包含特定输入。如果它已经存在,请阻止它再次添加,如果没有,则像往常一样添加它。
如何在不将所有内容从数据库中提取出来进行检查的情况下询问数据库是否存在?
【问题讨论】:
标签: python database django postgresql
你可以使用
Entry.objects.filter(name='name', title='title').exists()
这将返回真/假值。当您使用 count 时,orm 会生成查询,该查询的执行时间比 exists 方法要长得多。当对象不存在时get方法会抛出异常。
request.POST 是一个字典,因此可以用它检查你使用的 db,即:
Entry.objects.filter(name=request.POST['name'], title=request.POST['title']).exists()
【讨论】:
您的问题的答案是“是”。但是,我认为您还应该研究查询数据库的替代方法;在您不希望存在重复的字段集上创建一个唯一键。
现在,回答您的问题。查看 Django 文档以进行查询:
https://docs.djangoproject.com/en/dev/topics/db/queries/
简而言之,如果你有一个 Thing 的数据模型,Thing.objects 就是访问查询的接口。来自文档(使用博客条目,其中有一个字符串字段“标题”作为示例):
Entry.objects.get(headline__exact="Man bites dog")
界面的全部功能是您对数据库的期望(除了完全匹配之外,还有一组丰富的数据比较)。我建议您进一步查看文档以解决您的具体问题。
【讨论】: