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__):

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...