当我试图运行以下代码时,会得到错误:
Django,截断的不正确的双值:'\x00'
我搜索并阅读了这个问题的解决方案,我无法解决我的问题。我正在使用Django 1.3.1,Python2.7.3,尝试了MySQL Python连接器1.2.3和1.2.4 (但它没有解决我的问题)。下面是我的代码
模型
class DbView(models.Model):
column1 = models.CharField(max_length=225, db_column='column1') # Field name made lowercase.
column2 = models.CharField(max_length=75, db_column='column2') # Field name made lowercase.
column3 = models.CharField(max_length=75, db_column='column3') # Field name made lowercase.
column4 = models.CharField(max_length=75, db_column='column4') # Field name made lowercase.
column5 = models.CharField(max_length=75, db_column='column5') # Field name made lowercase.
column6 = models.IntegerField(db_column='column6') # Field name made lowercase.
column7 = models.DecimalField(decimal_places=3, max_digits=9, db_column='column7') # Field name made lowercase.
column8 = models.DecimalField(decimal_places=3, max_digits=9, db_column='column8') # Field name made lowercase.
class Meta:
db_table = u'db_view'
视图
def lookupTable(testtype):
if (testtype == 'Db'):
return DbView
def queryTest(request,val1,val2,val3,val4,val5,type,):
rt=lookupTable(type).objects.using('dvt_wlan').filter(column2=val1,column4=val2,column5=val4,column3=val3,column1__contains=val5).values('column6').distinct('column6');
#I tried to execute to run without using "distinct" part but it does not work
lTemp.append(rt[0]['column6']) #error comes here
lTemp.append(rt[1]['column6'])
lTemp.append(rt[2]['column6'])
我试图在MySQL数据库视图上启动一个查询,它没有任何主键,使用django。我还有一个数据库视图,当我试图在该视图上运行相同的代码时,它实际上是工作的,所以我不知道问题到底是什么。
它当时没有给出错误我,但是当它试图访问元素,即rt时,它会产生一个错误。然后,我发现实际上数据库查询是在尝试访问时触发的,而不是在评估时。我签入调试器时,"rt“是ValuesQuerySet类型,但无法访问元素。
我还尝试了通过删除上面代码中的"filter“部分来运行查询,但它不起作用。
发布于 2013-12-02 21:45:15
我解决了这个问题。我想这不是正确的解决办法,但我没有选择,因为我没有得到帮助。
解决方案:
而不是使用MySQL视图(实际上是使用两个数据库表创建的)从Django运行命令。我首先从第一个数据库表中检索列,然后将它们添加到列表中,然后对第二个数据库表运行另一个查询。
for r in Table1.objects.using('schema1').filter(column1=val1,column2=val2).values('column3').distinct('column3'):
ltest.append(r['column3'])
for r in lookupTable(type).objects.using('schema1').filter(column3__in=ltest).values('column4').distinct('column4'):
lTemp.append(r['column4'])
现在起作用了。所以我想,可能是数据库视图没有主键。因此,在创建模型时,Django自动添加一个"id“字段,该字段是主键。在数据库表的情况下,它们已经有主键,这可能就是我没有遇到任何问题的原因。
https://stackoverflow.com/questions/20262700
复制