如何使用SqlAlchemy中的“CONVERT”函数?

Cha*_*Gao 5 python sqlalchemy func

我试过:

from sqlalchemy import VARCHAR
result = session.query(Table).filter(func.convert(VARCHAR(8), Table.datetimefiedld, 8) >= some_date).all()
Run Code Online (Sandbox Code Playgroud)

我收到 AttributeError: 'VARCHAR' 对象没有属性 'self_group'

有人可以解释一下如何在 sqlalchemy 中使用 CONVERT 函数吗?谢谢!

Pau*_*ine 7

我想表达这一点的规范方式是:

func.convert(literal_column('VARCHAR(8)'), Table.datetimefiedld, 8)
Run Code Online (Sandbox Code Playgroud)

由于像这样的表达式sqlalchemy.sql.func.ANYTHING(arg1, argN)将被转换为ANYTHING(arg1, argN),因此您可以破解:

func.convert(func.VARCHAR(8), Table.datetimefiedld, 8)
Run Code Online (Sandbox Code Playgroud)

有什么不同?

>>> 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)
Run Code Online (Sandbox Code Playgroud)

两者都应该有效,但第二个更明确(也更详细)。如果您要经常使用它,您可以定义:

def date2str(field):
    return sql.func.CONVERT(
               sql.literal_column('VARCHAR(8)'), 
               field, 
               sql.literal_column(8)
           )
Run Code Online (Sandbox Code Playgroud)

其用途如下:

date2str(Table.field)
Run Code Online (Sandbox Code Playgroud)