SQLAlchemy列类型比较

dav*_*ode 5 python sql sqlalchemy

我正在对不同数据库类型进行大量数据库自省,并且我希望能够比较两种列类型。例如,Boolean使用将定义为type 的字段declarative_base()转换TINYINTMySQL Dialact 的特定字段,因此进行如下检查:

model_a.__table__.columns['col'].type == model_b.__table__.columns['col'].type
Run Code Online (Sandbox Code Playgroud)

不起作用,并且这一个都不:

(type_a == type_b) or issubclass(type_b, type_a)
Run Code Online (Sandbox Code Playgroud)

如何比较两列数据类型为“亲和力”?(通过检查代码,我看到列类型Comparator附加了一个类,但是我不确定它是否有帮助以及如何使用它)也可以在SQLAlchemy配置中强制使用列类型(避免使用方言-具体转换)?

小智 5

(回答一个老问题,因为我一直在研究这个问题)。

最快的解决方案是比较类型的 str():

assert str(type_a) == (type_b)

这适用于简单类型,但如果您有任何Variant类型或包装器(例如MutableDict包装 Postgres JSON),那么您必须处理特殊情况。