如何从 CTE 进行 peewee ORM return 自定义字段转换?
How to make peewee ORM return custom fields conversions from CTE?
我正在尝试使用 Peewee ORM 的递归 CTE,returns 字段类型与非递归查询相同。
根据 Peewee 文档,您使用 select_from
方法,使用来自先前查询的列,如下所示:
query = (cte
.select_from(cte.c.name, cte.c.level, cte.c.path)
.order_by(cte.c.path))
我的查询基本有效。但是,我的 table 使用了几个自定义字段类型。使用常规查询时,这些字段由字段转换为 python_value
方法中定义的对象。但是当使用 CTE 查询时,这些值作为原始数据库类型出现,而不是通过自定义字段方法转换。
有没有办法告诉查询使用字段转换?
我试过 .select_from(cte.c.myfield.convert(MyEnum), ...)
,但没用。
select_from()
方法 returns 你是一个“简单的”Select 查询,对转换值了解不多。这应该有效:
from peewee import ModelSelect
class Reg(Model):
value = TextField()
Reg.create(value='1')
Reg.create(value='22')
cte = Reg.select(Reg.value).cte('regs', columns=('val',))
query = ModelSelect(Reg, (cte.c.val.converter(int),))
query = query.from_(cte).with_cte(cte)
for row in query:
print(type(row.val), row.val)
# <class 'int'> 1
# <class 'int'> 22
我正在尝试使用 Peewee ORM 的递归 CTE,returns 字段类型与非递归查询相同。
根据 Peewee 文档,您使用 select_from
方法,使用来自先前查询的列,如下所示:
query = (cte
.select_from(cte.c.name, cte.c.level, cte.c.path)
.order_by(cte.c.path))
我的查询基本有效。但是,我的 table 使用了几个自定义字段类型。使用常规查询时,这些字段由字段转换为 python_value
方法中定义的对象。但是当使用 CTE 查询时,这些值作为原始数据库类型出现,而不是通过自定义字段方法转换。
有没有办法告诉查询使用字段转换?
我试过 .select_from(cte.c.myfield.convert(MyEnum), ...)
,但没用。
select_from()
方法 returns 你是一个“简单的”Select 查询,对转换值了解不多。这应该有效:
from peewee import ModelSelect
class Reg(Model):
value = TextField()
Reg.create(value='1')
Reg.create(value='22')
cte = Reg.select(Reg.value).cte('regs', columns=('val',))
query = ModelSelect(Reg, (cte.c.val.converter(int),))
query = query.from_(cte).with_cte(cte)
for row in query:
print(type(row.val), row.val)
# <class 'int'> 1
# <class 'int'> 22