首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django '<object>匹配查询不存在‘当我在数据库中看到它的时候

Django '<object>匹配查询不存在‘当我在数据库中看到它的时候
EN

Stack Overflow用户
提问于 2010-03-16 20:40:14
回答 5查看 24.3K关注 0票数 9

我的模型是这样的:

代码语言:javascript
复制
class Staff(models.Model):
    StaffNumber = models.CharField(max_length=20,primary_key=True)
    NameFirst = models.CharField(max_length=30,blank=True,null=True)
    NameLast = models.CharField(max_length=30)
    SchoolID = models.CharField(max_length=10,blank=True,null=True)
    AutocompleteName = models.CharField(max_length=100, blank=True,null=True)

我使用的是MySQL,以防万一。

在manage.py外壳中:

代码语言:javascript
复制
root@django:/var/www/django-sites/apps# python manage.py shell
Python 2.5.2 (r252:60911, Jan 20 2010, 21:48:48)
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from disciplineform.models import Staff
>>> s = Staff.objects.all()
>>> len(s)
406

所以我知道里面有406个"Staff“对象。我还可以在数据库中看到它们。我检查其中一个值:

代码语言:javascript
复制
>>> s[0].NameFirst
u'"ANDREA"'

这也与我在数据库中看到的一致。现在我尝试“获取”这个对象。

代码语言:javascript
复制
>>> a = Staff.objects.get(NameFirst='ANDREA')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/lib/python-support/python2.5/django/db/models/manager.py", line 93, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/var/lib/python-support/python2.5/django/db/models/query.py", line 309, in get
    % self.model._meta.object_name)
DoesNotExist: Staff matching query does not exist.

哈?对于我测试过的所有列的所有值,都会发生这种情况。我在我的view.py代码中得到了同样的结果。

很明显我在做一些愚蠢的事情。那是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-16 20:57:17

试一试

代码语言:javascript
复制
a = Staff.objects.get(NameFirst=u'"ANDREA"')

u告诉Python/Django这是一个Unicode字符串,而不是一个普通的旧str,在您的s[0].NameFirst示例中,它将值显示为包含双引号。

票数 8
EN

Stack Overflow用户

发布于 2010-12-16 18:45:11

我遇到了同样的问题,下面是解决方案:

代码语言:javascript
复制
from django.db import reset_queries, close_connection
close_connection()
reset_queries()
票数 2
EN

Stack Overflow用户

发布于 2012-01-18 14:04:07

名称以额外的冗余双字节存储在数据库中。因此,如果您想要捕获该记录,正确的代码是:

代码语言:javascript
复制
a = Staff.objects.get(NameFirst='"ANDREA"')

…而不是:

代码语言:javascript
复制
a = Staff.objects.get(NameFirst='ANDREA')

如果您不能确定查询是否会返回结果,则必须添加异常处理,如下所示:

代码语言:javascript
复制
try:
    a = Staff.objects.get(NameFirst='"ANDREA"')
except Exception:
    a = None
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2454329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档