Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django'&书信电报;对象>;匹配查询不存在';当我能在数据库中看到它的时候_Python_Django - Fatal编程技术网

Python Django'&书信电报;对象>;匹配查询不存在';当我能在数据库中看到它的时候

Python Django'&书信电报;对象>;匹配查询不存在';当我能在数据库中看到它的时候,python,django,Python,Django,我的模型如下所示: 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.CharFiel

我的模型如下所示:

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 shell:

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个“职员”对象。我还可以在数据库中看到它们。我检查其中一个值:

>>> s[0].NameFirst
u'"ANDREA"'
这也符合我在数据库中看到的。现在我尝试“获取”这个对象

>>> 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.
>a=Staff.objects.get(NameFirst='ANDREA')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/var/lib/pythonsupport/python2.5/django/db/models/manager.py”,get中的第93行
返回self.get\u query\u set().get(*args,**kwargs)
文件“/var/lib/pythonsupport/python2.5/django/db/models/query.py”,第309行,在get中
%self.model.\u meta.object\u name)
DoesNotExist:人员匹配查询不存在。
嗯?我测试过的所有列的所有值都会出现这种情况。我在view.py代码中得到了相同的结果


我显然在做一些愚蠢的事情。这是什么?

我以前也遇到过类似的问题

我不完全清楚为什么,但原始的“get”往往会给我带来问题。因此,我通常使用“过滤器”,然后获取第一个结果

a = Staff.objects.filter(NameFirst='ANDREA')
result = a[0]
试一试


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

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

from django.db import reset_queries, close_connection
close_connection()
reset_queries()

该名称使用额外的冗余双引号存储在数据库中。因此,如果要捕获该记录,正确的代码是:

a = Staff.objects.get(NameFirst='"ANDREA"')
…而不是:

a = Staff.objects.get(NameFirst='ANDREA')
如果您不能确定,该查询将返回结果,则必须添加异常处理,如下所示:

try:
    a = Staff.objects.get(NameFirst='"ANDREA"')
except Exception:
    a = None

一件类似的事情发生在我身上。我能够通过在数据库中放入一些东西来解决这个问题,以便查询返回


这和你的不完全一样,但这是谷歌的第一次成功,所以我想我会和大家分享

这是名言!那是我正在做的蠢事。数据库中的所有值都用双引号括起来。我甚至看不到引用,所以我没有注意到。作为记录,我尝试在没有Unicode规范的情况下包含引号,但仍然有效。谢谢不客气。我真的不认为这是Unicode的问题,因为Django在Unicode处理方面一直都很出色,但我不使用MySQL,所以我想确保我的所有基础都被覆盖。在我的例子中,它是一个变量,所以我使用Unicode(variable_name)。
try:
    a = Staff.objects.get(NameFirst='"ANDREA"')
except Exception:
    a = None