sqlalchemy 外键找不到表

mon*_*mon 3 python database sqlite sqlalchemy flask-sqlalchemy

I\xe2\x80\x99m 使用 sqlalchemy 制作数据库,该数据库由三个类组成:User、Meeting、MeetingRoom\n我想在 Meeting 中为会议室创建外键,但由于某种原因,它给出以下错误

\n\n
\n

sqlalchemy.exc.NoReferencedTableError:与列“meeting.mrid”关联的外键找不到用于生成目标列“mrid”外键的表“meetingroom”

\n
\n\n

错误截图

\n\n

当我们以相反的方式执行此操作(在会议室中添加会议外键)时,它可以工作,我\xe2\x80\x99m 不确定问题是什么\xe2\x80\x99s\n这是代码:

\n\n
from flask import Flask, request, jsonify\nfrom flask_sqlalchemy import SQLAlchemy\nfrom flask_marshmallow import Marshmallow\nimport os\n# ==================================\napp = Flask(__name__)\nbasedir = os.path.abspath(os.path.dirname(__file__))\napp.config[\'SQLALCHEMY_DATABASE_URI\'] = \'sqlite:///db.db\'\napp.config[\'SQLALCHEMY_TRACK_MODIFICATION\'] = False\ndb = SQLAlchemy(app)\nma = Marshmallow(app)\n# ====================DATABASE\n# =============USER\nclass User (db.Model):\n id = db.Column(db.Integer,primary_key=True)\n name = db.Column(db.String(30))\n Email = db.Column(db.String(30))\n Pass = db.Column(db.String(30))\n Phone = db.Column(db.String(12))\n Department = db.Column(db.String(30))\n Major = db.Column(db.String(30))\n meeting = db.relationship(\'Meeting\', backref=\'creator\')\n meetingroom = db.relationship(\'MeetingRoom\', backref=\'reserver\')\n\n def __init__(self, name, Email, Pass, Phone, Department, Major):\n  self.name = name\n  self.Email = Email\n  self.Pass = Pass\n  self.Phone = Phone\n  self.Department = Department\n  self.Major = Major\n\n\n# ================== MEETING ROOM\nclass MeetingRoom (db.Model):\n mrid = db.Column(db.Integer,primary_key=True)\n reserver_id = db.Column(db.Integer, db.ForeignKey(\'user.id\'))\n meetingm = db.relationship(\'Meeting\', backref=\'mrid\')\n #mid = db.Column(db.Integer, db.ForeignKey(\'meeting.Mid\'))\n\n def __init__(self, mrid, reserver_id):\n  self.mrid = mrid\n  self.reserver_id = reserver_id\n\n\n# =======================MEETING\nclass Meeting (db.Model):\n Mid = db.Column(db.Integer,primary_key=True)\n Mname = db.Column(db.String(100))\n Des = db.Column(db.String(100))\n Date = db.Column(db.String(20))\n creator_id = db.Column(db.Integer, db.ForeignKey(\'user.id\'))\n #meetingroomm = db.relationship(\'MeetingRoom\', backref=\'mroom\')\n mrid = db.Column(db.Integer, db.ForeignKey(\'meetingroom.mrid\'))\n #roomno_id = db.Column(db.Integer, db.ForeignKey(\'meetingroom.mrid\')\n\n def __init__(self, Mname, Des, Date, creator_id, mrid):\n  self.Mname = Mname\n  self.Des = Des\n  self.Date = Date\n  self.creator_id = creator_id\n  self.mrid = mrid\n
Run Code Online (Sandbox Code Playgroud)\n

Ric*_*ard 6

SqlAlchemy 正在使用自己的表名方案创建表并使用meeting_room. 因此,您可以在中引用此名称,relationship或者可以通过__tablename__在模型类上设置属性来覆盖。像这样:

class MeetingRoom (db.Model):
    __tablename__ = 'meetingroom'
Run Code Online (Sandbox Code Playgroud)