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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM