匹配查询不存在错误

时间:2018-03-03 04:11:03

标签: python django database

这个网站上有很多人对我有类似的问题,但我似乎找不到按照我想要的方式解决它的问题。

我试图从数据库中获取密码,以便我可以自动发送电子邮件。为此,我打电话给Credential.objects.get(username='foo').password。 这是我得到错误的地方。 真正奇怪的是我已经在python控制台中访问了这个数据库, 我在其中创建了一行。我不知道为什么它没有出现!

其他人似乎建议您执行以下操作:

try:
    Credential.objects.get(username='foo').password
except Exception as e:
    return None

所有这一切都是为了确保程序不会返回错误。 这对我没有帮助,因为这不会失败。 必须发送一封电子邮件,此电话必须获得该电子邮件。 我几乎可以肯定我为此调用了正确的功能,但之前我错了。对此的任何帮助将不胜感激。

credential.py(出于安全原因未提出max_length):

import d_models as models

class Credential(models.Model):
    username = models.CharField()
    password = EncryptedCharField()

2 个答案:

答案 0 :(得分:0)

以下可能会清除您的概念。

from django.core.exceptions import ObjectDoesNotExist

try:
    Credential.objects.get(username='foo').password
except ObjectDoesNotExist:
#If User with username='foo' does not exist in database then it will comes #in exception.
#Even if there are multiple entries in database with username='foo' then also it will give you error for this you need to use another exception. 
    return "What ever you want to return on exception"

否则你可以尝试:

python manage.py shell
for user in Credentials.objects.all():
    print username
    print password

并检查数据库中可用的用户数(在settings.py文件中配置)。

答案 1 :(得分:0)

看了我的代码两个小时后,我意识到我是个白痴。

我遗漏的一件事是我在一个测试用例中运行了这个函数,它会分离出单独的空白测试数据库。函数调用不起作用,因为它试图进入错误的数据库!

为了解决这个问题,我刚刚调用了./manage.py dumpdata --format json --indent 4 -o ./full/path/to/file/credential.json并将fixtures = ['./full/path/to/file/credential.json']放在测试类的顶部。感谢大家的建议!希望我没有浪费你太多的时间!