sqlalchemy.exc.InvalidRequestError: Table 'run_result' is already defined for this MetaData instance

临时解决办法:

在models文件导入db后,加上如下代码:

db.metadata.clear()

但解决问题的根本之处还是在于找到,为何会声明了2次类的定义呢?

 

解析:

table 'roles_users' is already defined for this MetaData instance,意思是说表XX已经定义。这个在于你想干嘛。

第一,如果你想删除旧类并重新生成新的映射类

那么在定义类之前尝试运行以下行:

db.metadata.clear()

原因是第一次通过定义python类声明SQLAlchemy Mapping时,类的定义将保存到元数据对象中,以防止多个定义映射到同一个表所导致的冲突。当您调用该clear()方法时,您将清除元数据对象在内存中保存的所有表定义,这允许您再次声明它们。

第二,保留你的旧类,然后重启你的应用程序

可以使用reflect方法编写测试以查看表是否已存在:

db.metadata.reflect(engine=engine)

其中engine是您使用创建的数据库连接create_engine(),并查看您的表是否已存在,并且只有在未定义表时才定义该类。

 

参考:https://stackoverflow.com/questions/37908767/table-roles-users-is-already-defined-for-this-metadata-instance

 

原文出处:

https://blog.csdn.net/BridgeHong/article/details/88999316

posted @ 2019-10-23 15:01  wangju003  阅读(2873)  评论(0编辑  收藏  举报