简介:我正在使用支持多个数据库的SQLAlchemy反射编写Web界面。事实证明,应用程序的作者使用小写表/列定义了postgresql,例如。 job.jobstatus ,而sqlite有大小写混合,例如 Job.JobStatus 。我正在使用示例中的 DeclarativeReflectedBase 来组合反射和声明式样式。
问题:将SQLAlchemy配置为使用反射不区分大小写的表/列
我到目前为止已做过:
还有待解决的问题:
问题:我的假设是正确的还是更直接的方式? 也许我可以告诉反思,以反映所有小写,所有问题都消失了。
答案 0 :(得分:1)
您可能希望在每个列上以小写形式定义“.key”,这样您就可以在应用程序代码中将列称为小写。您应该使用column_reflect事件(请参阅http://docs.sqlalchemy.org/en/latest/core/events.html#schema-events)将此密钥定义为.name的小写版本。
然后,当你反映表格时,我会做这样的事情:
def reflect_table(name, engine):
if engine.dialect.name == 'postgresql':
name = name.lower()
return Table(name, autoload=True, autoload_with=engine)
my_table = reflect_table("MyTable", engine)
我认为这可能会涵盖它。