[英]How to get rid of sqlalchemy.exc.NoReferencedTableError?
這是與問題相關的一些代碼:
db_session.py
import sqlalchemy as sa
import sqlalchemy.orm as orm
import sqlalchemy.ext.declarative as dec
SqlAlchemyBase = dec.declarative_base()
__Session = None
def create_session():
global __Session
global_init()
return __Session()
def global_init():
global __Session
if __Session:
return
conn_str = f'sqlite:///sqlite.db'
engine = sa.create_engine(conn_str, echo=True, future=True)
__Session = orm.sessionmaker(bind=engine)
SqlAlchemyBase.metadata.create_all(engine)
User.py(錯誤來自 User.department_id 列)
import sqlalchemy
from db_session import SqlAlchemyBase
class User(SqlAlchemyBase):
__tablename__ = 'users'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True, autoincrement=True)
department_id = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey('departments.id'), nullable=True)
部門.py
import sqlalchemy
from db_session import SqlAlchemyBase
class Departments(SqlAlchemyBase):
__tablename__ = 'departments'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True, autoincrement=True)
chief = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("users.id"))
members = sqlalchemy.orm.relationship("User", foreign_keys="User.department_id")
每當我嘗試訪問“用戶”表時都會發生錯誤。 這是錯誤文本:
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'users.department_id' could not find table 'departments' with which to generate a foreign key to target column 'id'
我用數據庫管理軟件檢查了 sqlite.db 文件,肯定有“部門”表。 我已經打印了 output
SqlAlchemyBase.metadata.tables.keys()
“部門”表也在那里,甚至還有正確的名稱。 我試圖在“部門”表中添加一些內容,但這也無濟於事。 所有表的名稱都使用tablename屬性顯式設置,因此 sqlalchemy 的自動表命名不是問題。 我如何擺脫這個錯誤?
感謝@snakecharmerb 提供的解決方案!
事實證明,我必須在所有地方導入部門 class 我使用用戶 model 為 sqlalchemy 來查找所有表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.