微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 检查sqlalchemy中的表兼容性

我声明了一些表示远程数据库的表.

我想检查我的表定义是否与我连接的远程数据库匹配.

我有以下功能

def verify_db_tables(conn,Metadata):
    """checks that the tables declared in Metadata are actually in the db"""
    for table in Metadata.tables.values():
        check = sqlalchemy.MetaData()
        check.reflect(conn,table.schema,True,(table.name,))
        check = check.tables[table.key]
        for column in table.c:
            if column.name not in check.c:
                raise Exception("table %s does not contain column %s" %
                        (table.key,column.name))
            check_column = check.c[column.name]
            if check_column.type != column.type:
                raise Exception("column %s.%s is %s but expected %s" %
                        (table.key,column.name,check_column.type,column.type))

我特别不关心表中是否有其他列,并且不关心是否有其他表.

但是,当我运行此代码时,我收到以下错误

Exception: column dx.mail_data.message_id is INTEGER but expected INTEGER

如何检查反射表中的列与我的定义类型相同?

解决方法

sqlite使用了一个类heiarchy,所以这将很好地工作

if not instance(check_column.type,column.type.__class__):

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐