我试过了:
from sqlalchemy import VARCHAR
result = session.query(Table).filter(func.convert(VARCHAR(8), Table.datetimefiedld, 8) >= some_date).all()
我得到了AttributeError:'VARCHAR'对象没有属性'self_group'
有人可以解释一下如何在sqlalchemy中使用CONVERT函数吗?谢谢!
答案 0 :(得分:2)
我猜这种表达方式的规范方法是:
func.convert(literal_column('VARCHAR(8)'), Table.datetimefiedld, 8)
由于sqlalchemy.sql.func.ANYTHING(arg1, argN)
之类的表达式会转换为ANYTHING(arg1, argN)
,因此您可以破解:
func.convert(func.VARCHAR(8), Table.datetimefiedld, 8)
有什么区别?
>>> from sqlalchemy import sql
>>> print sql.func.CONVERT(func.VARCHAR(8), Table.fied, 8)
CONVERT(VARCHAR(:VARCHAR_1), table.field, :CONVERT_1)
>>> print sql.func.CONVERT(
sql.literal_column('VARCHAR(8)'),
Table.fied,
sql.literal_column('8')
)
CONVERT(VARCHAR(8), table.field, 8)
两者都应该有效,但第二种更明确(更详细)。如果您打算使用它,可以定义:
def date2str(field):
return sql.func.CONVERT(
sql.literal_column('VARCHAR(8)'),
field,
sql.literal_column(8)
)
使用只是:
date2str(Table.field)