sqlalchemy:使模式反射为所有实例查找/使用自定义类型

2024-04-25 21:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图重写SQLAlchemyDATETIME2类型(来自MS SQL Server),以便在必要时丢弃额外的子秒精度数字,以强制转换为本机Python日期时间类型,如文档的Replacing the Bind Result Processing of Existing Types部分所述,如下所示:

import re
import sqlalchemy.dialects as sa_dialects

class TruncatingPrecisionDATETIME2(sa_dialects.mssql.base.DATETIME2):
    __visit_name__ = 'DATETIME2'
    _reg = re.compile(r"(\d+):(\d+):(\d+)(?:\.(\d{0,6})\d*)?")

    def process_result_value(self, value, dialect):
        if isinstance(value, util.string_types):
            return datetime.time(*[
                int(x or 0)
                for x in self._reg.match(value).groups()])
        else:
            return value

    def adapt(self, impltype):
        return TruncatingPrecisionDATETIME2()

但是,当我调用meta.reflect(),并检查数据库中类型为DATETIME2的列的类型时,它是sqlalchemy.dialects.mssql.base.DATETIME2的实例,而不是{}。我需要做些什么来对所有DATETIME2实例进行全局更改?在


Tags: importselfre类型basereturnsqlalchemyvalue
1条回答
网友
1楼 · 发布于 2024-04-25 21:18:22

这可能是非官方的,而且我不确定它是否能在MSSQL上工作,而不是PostgreSQL(as this changelog might seem to suggest),但是通过用自定义子类替换sqlalchemy.dialects.mssql.base.ischema_names字典上的“datetime2”项,如果官方推荐的修改结果的方法是这样的话,那么您可以覆盖该类型的所有反射所使用的SQLAlchemy类型处理失败。在

相关问题 更多 >