臨時解決辦法:
在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://blog.csdn.net/BridgeHong/article/details/88999316