dav*_*ode 5 python sql sqlalchemy
我正在对不同数据库类型进行大量数据库自省,并且我希望能够比较两种列类型。例如,Boolean使用将定义为type 的字段declarative_base()转换TINYINT为MySQL 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),那么您必须处理特殊情况。