簡體   English   中英

如何擺脫 sqlalchemy.exc.NoReferencedTableError?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM