簡體   English   中英

SQLAlchemy 在多對多關系中找不到通過外鍵引用的表

[英]SQLAlchemy cannot find referenced table via foreignkey in many-to-many relationship

我已經成功地在我的數據庫中添加了一個多對多關系。 但是,當嘗試添加另一個時,我遇到了:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'user_shiftTemplate.template_id' could not find table 'shifttemplate' with which to generate a foreign key to target column 'id'

我在嘗試創建關系的兩個表之前定義了關聯表:

user_shiftTemplate = db.Table('user_shiftTemplate',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('template_id', db.Integer, db.ForeignKey('shifttemplate.id'))
)

這是我試圖為其創建關系的實際兩個表(同樣,在上面顯示的關聯表之后定義)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    oauth_id = db.Column(db.String(512), nullable=False, unique=True, default='')
    ext_id = db.Column(db.Integer, nullable=False, unique=True)
    name = db.Column(db.String(300), nullable=False)
    email = db.Column(db.String(256), unique=True, nullable=False)
    phone = db.Column(db.Integer, nullable=False)
    date_joined = db.Column(db.DateTime, nullable=False, default=getPacificTime)
    password = db.Column(db.String(60), nullable=False)
    meta = db.Column(db.JSON, nullable=False, default={})

    shifts = db.relationship('Shift', secondary=user_shift, backref='employees') 
    #^^^^ This is the other many-to-many relationship which actually works ^^^^
    shiftTemplates = db.relationship('ShiftTemplate', secondary=user_shiftTemplate, backref='employees')

class ShiftTemplate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), nullable=False)
    duration = db.Column(db.Integer, nullable=False)
    maxEmployees = db.Column(db.Integer, nullable=False)
    minEmployees = db.Column(db.Integer, nullable=False)
    startTime = db.Column(db.String(4), nullable=False)

我已經仔細確保我的 ShiftTemplate 表的格式與我成功制作的其他多對多關系表的格式相匹配。 但是,某些原因導致 SQLAlchemy 出於某種原因無法識別我的 ShiftTemplate 表。 還應該注意的是,在關聯表定義的 db.ForeignKey('shifttemplate.id') 行中,我嘗試了每個大寫組合,從 shiftTemplate 到 ShiftTemplate 到 Shifttemplate,它們都返回相同的錯誤,所以我懷疑這是原因。

could not find table 'shifttemplate' - 最有可能生成的名稱(我認為是由flask-sqlalchemy sqlalchemy 生成的)與您使用的名稱有點不同,您可以通過__tablename__ class 變量手動指定 tablenaem,如下所示:

class Post(Base):
    __tablename__ = "post"

    ...

但回到你的問題 - 是的,sqlalchemy 可能區分大小寫,而不是越野車:)

我將我的 ShiftTemplate 數據庫表 class 重命名為“模板”,並相應地更新了對表名的所有引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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