为什么peewee强制选择列到整数

时间:2015-11-06 08:02:54

标签: python sqlite peewee

我不能在peewee中使用sqlite函数group_concat()。这是完整的snipet。某种程度上,peewee想要将group_concat()的结果转换为整数,而它是字符串(" 1,2")。我无法找到抑制它的方法。

auto max_angle = std::max_element(begin(angles), end(angles),
            [](const std::pair<int, int>& left, const std::pair<int, int>& right){
            return left.second <  right.second;
        });

产生以下错误:

from peewee import *

db = SqliteDatabase(':memory:')

class Test(Model):
    name = CharField()
    score = IntegerField()

    class Meta:
        database = db

db.create_tables([Test])
Test.create(name='A', score=1).save()
Test.create(name='A', score=2).save()

#select name, group_concat(score) from Test group by name
for t in Test.select(Test.name, fn.group_concat(Test.score)).order_by(Test.name):
    pass

2 个答案:

答案 0 :(得分:4)

尝试在对group_concat的调用中添加coerce(False)

query = (Test
         .select(Test.name, fn.GROUP_CONCAT(Test.score).coerce(False))
         .order_by(Test.name))
for t in query:
    pass

Peewee发现Test.score是一个整数字段,因此每当在该列上调用一个函数时,Peewee将尝试将结果转换回int。问题是group_concat返回一个字符串,所以我们必须告诉Peewee不要弄乱返回值。

答案 1 :(得分:0)

刚刚发现fn.group_concat(&#34;&#34; + Test.score)的结果不会转换为整数。但我认为结果sql可能不太理想

  

SELECT&#34; t1&#34;。&#34; name&#34;,group_concat(?+&#34; t1&#34;。&#34;得分&#34;)AS allscore FROM&#34 ;试验&#34; AS t1 ORDER BY&#34; t1&#34;。&#34; name&#34; [&#39;&#39;]

有人知道更优雅的方式吗?