首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django,截断的不正确的双值:'\x00‘在ValueQuerySet中

Django,截断的不正确的双值:'\x00‘在ValueQuerySet中
EN

Stack Overflow用户
提问于 2013-11-28 09:50:06
回答 1查看 684关注 0票数 1

当我试图运行以下代码时,会得到错误:

Django,截断的不正确的双值:'\x00'

我搜索并阅读了这个问题的解决方案,我无法解决我的问题。我正在使用Django 1.3.1,Python2.7.3,尝试了MySQL Python连接器1.2.3和1.2.4 (但它没有解决我的问题)。下面是我的代码

模型

代码语言:javascript
运行
复制
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'

视图

代码语言:javascript
运行
复制
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“部分来运行查询,但它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 05:45:15

我解决了这个问题。我想这不是正确的解决办法,但我没有选择,因为我没有得到帮助。

解决方案:

而不是使用MySQL视图(实际上是使用两个数据库表创建的)从Django运行命令。我首先从第一个数据库表中检索列,然后将它们添加到列表中,然后对第二个数据库表运行另一个查询。

代码语言:javascript
运行
复制
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“字段,该字段是主键。在数据库表的情况下,它们已经有主键,这可能就是我没有遇到任何问题的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20262700

复制
相关文章

相似问题

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