臨時解決辦法:html
在models文件導入db後,加上以下代碼:python
db.metadata.clear()
但解決問題的根本之處仍是在於找到,爲什麼會聲明瞭2次類的定義呢?sql
解析:數據庫
table 'roles_users' is already defined for this MetaData instance,意思是說表XX已經定義。這個在於你想幹嗎。app
第一,若是你想刪除舊類並從新生成新的映射類測試
那麼在定義類以前嘗試運行如下行:this
db.metadata.clear()
緣由是第一次經過定義python類聲明SQLAlchemy Mapping時,類的定義將保存到元數據對象中,以防止多個定義映射到同一個表所致使的衝突。當您調用該clear()
方法時,您將清除元數據對象在內存中保存的全部表定義,這容許您再次聲明它們。spa
第二,保留你的舊類,而後重啓你的應用程序.net
可使用reflect方法編寫測試以查看錶是否已存在:code
db.metadata.reflect(engine=engine)
其中engine是您使用建立的數據庫鏈接create_engine()
,並查看您的表是否已存在,而且只有在未定義表時才定義該類。
原文出處:
https://blog.csdn.net/BridgeHong/article/details/88999316