簡體   English   中英

為什么peewee強制將列選擇為整數

[英]Why peewee coerces select column to integer

我不能在peewee中使用sqlite函數group_concat()。 這是完整的片段。 peewee希望以某種方式將group_concat()的結果轉換為整數(字符串(“ 1,2”))。 我找不到抑制它的方法。

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

它產生以下錯誤:

Traceback (most recent call last):
File "C:\Users\u_tem0m\Dropbox\Wrk\sgo\broken.py", line 17, in <module>  
  for t in Test.select(Test.name, fn.group_concat(Test.score)).order_by(Test.name):  
File "C:\Program Files\Python 3.5\lib\site-packages\peewee.py", line 1938, in next
  obj = self.qrw.iterate()  
File "C:\Program Files\Python 3.5\lib\site-packages\peewee.py", line 1995, in iterate  
  return self.process_row(row)  
File "C:\Program Files\Python 3.5\lib\site-packages\peewee.py", line 2070, in process_row  
  setattr(instance, column, func(row[i]))  
File "C:\Program Files\Python 3.5\lib\site-packages\peewee.py", line 874, in python_value  
  return value if value is None else self.coerce(value)  
ValueError: invalid literal for int() with base 10: '1,2'  

嘗試在對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不要弄亂返回值。

剛剛發現fn.group_concat(“” + Test.score)的結果沒有轉換為整數。 但是我認為生成的sql可能不太理想

選擇“ t1”。“ name”,group_concat(?+“ t1”。“ score”)AS allscore FROM“ test” AS t1 OR BY BY“ t1”。“ name” [“]

有人知道更優雅的方式嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM