python – SQLAlchemy列类型比较

我在不同的数据库类型中进行了大量的数据库内省,我希望能够比较两种列类型.例如,使用declarative_base()定义为布尔类型的字段然后转换为 MySQL dialact的特定TINYINT,因此检查如下:

model_a.__table__.columns['col'].type == model_b.__table__.columns['col'].type

不起作用,也不是这个:

(type_a == type_b) or issubclass(type_b, type_a)

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

最佳答案 (回答一个老问题,因为我一直在研究这个问题).

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

断言str(type_a)==(type_b)

这适用于简单类型,但如果你有任何Variant类型或包装器(例如,MutableDict包装Postgres JSON),那么你将不得不处理一个特殊情况.

点赞