我正在对不同的数据库类型进行大量的数据库自省(introspection),我希望能够比较两种列类型。例如,定义为 Boolean
的字段使用 declarative_base()
输入然后转换为特定的 TINYINT
对于 MySQL 方言,所以检查如下:
model_a.__table__.columns['col'].type == model_b.__table__.columns['col'].type
行不通,这个也行:
(type_a == type_b) or issubclass(type_b, type_a)
如何比较数据类型“affinity”的两列? (通过检查代码,我看到列类型附加了一个 Comparator
类,但我不确定它是否有任何帮助以及如何使用它)
是否也可以在 SQLAlchemy 配置中强制列类型(通过避免方言特定的转换)?
最佳答案
(回答一个老问题,因为我一直在研究这个)。
最快的解决方案是比较类型的 str():
断言 str(type_a) == (type_b)
这适用于简单类型,但如果您有任何 Variant
类型或包装器(例如,MutableDict
包装 Postgres JSON
)那么你将不得不处理一个特殊情况。
关于python - SQLAlchemy 列类型比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787794/