我不能在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
答案 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;]
有人知道更优雅的方式吗?