sqlite sqlalchemy:使用+符号连接字符串

anauzrmj  于 2023-03-23  发布在  SQLite
关注(0)|答案(1)|浏览(135)

我试着用sqlalchemy将3个部分连接成一个SQL表达式:

func.date(cls.entry_date, '+' + cls.duration + ' year', '-1 day')

生成的SQL语句为:

date("My_Table"."Entry date",  '+' + "My_Table"."Durée" || ' year', '-1 day', '-1 day')

代替

date("My_Table"."Entry date",  '+' || "My_Table"."Durée" || ' year', '-1 day', '-1 day')

最后一个符号+正确转换为||(在“My_Table”.“Durée”和“year”之间)
第一个符号+在SQL语句中保持原样(在'+'和“My_Table”.“Durée”之间)
我不知道为什么。
我试图将字符串字符'+'更改为其他字符,因为我认为它可能会干扰串联+,但它不会改变任何东西。

编辑

我尝试使用func.concat('+', cls.duration, ' year'),但sqlite不理解concat
当然我可以使用f弦:

func.date(cls.entry_date, f"""'+ "{cls.duration.name}" year'""", '-1 day')

但我不相信没有更聪明的方式

jyztefdp

jyztefdp1#

我在github上得到了一个答案。学分归zzzeek
+操作符的行为切换了正在使用的数据类型的种类。如果你有字符串数据类型,它只产生||,字符串连接操作符。
FixedAsset.duration似乎是一个整数。你不能将整数连接到字符串,你必须使用`SQL CAST将该整数转换为字符串:

print(SA.select(SA.func.date(FixedAsset.entry_date, "+" + SA.cast(FixedAsset.duration, SA.String) + " year", '-1 day')))

相关问题