Python SQLAlchemy在原始sql表达式上重写types.DateTime
在对原始sql表达式使用sqlalchemy时,是否可以覆盖默认的type.DateTime行为 例如使用Python SQLAlchemy在原始sql表达式上重写types.DateTime,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,在对原始sql表达式使用sqlalchemy时,是否可以覆盖默认的type.DateTime行为 例如使用 myconnection.execute(text(“select*from mytable where mydate>:mydate),{'mydate':mypythondatetimeobject)} ,我想让type.DateTime自动从DateTime对象中删除时区 更新:我发现它是通过在查询中使用bindparam和Typedecorator工作的,如下所示: class M
myconnection.execute(text(“select*from mytable where mydate>:mydate),{'mydate':mypythondatetimeobject)}
,我想让type.DateTime自动从DateTime对象中删除时区
更新:我发现它是通过在查询中使用bindparam和Typedecorator工作的,如下所示:
class MyType(types.TypeDecorator):
impl = types.DateTime
def process_bind_param(self, value, dialect):
if value is not None:
return value.replace(tzinfo=None)
session.execute(
text(myquery, bindparams=[bindparam('mydateparam',
type_=MyType())]),
{'mydateparam':mydate}
)
但是我真的不想使用“bindparams”“在每一个问题上。是否可以简单地替换或覆盖默认的types.DateTime行为?如果使用基于表元数据的SQL表达式,则只需在相应的列上设置MyType即可。纯文本方法失去了一些便利。您可以将MyType粘贴到datetime类的sqlalchemy.types.type_映射中,尽管这目前不是公共API 如果是我,我会:
def mytext(stmt, params):
bindparams = []
for k, v in params:
if isinstance(v, datetime):
type_ = MyType()
else:
type_ = None
bindparams.append(bindparam(k, v, type_=type))
return text(stmt, bindparams=bindparams)
然后只需使用mytext(“从date=:date的表中选择*,{'date':datetime.today()})谢谢!我现在正在使用您的“mytext”解决方案,稍作调整。