该瓶-SQLAlchemy的文档说,许多一对多查找表不应该继承db.Model而是被写成db.Tables。从文档:
如果要使用多对多关系,则需要定义用于该关系的帮助程序表。对于此辅助表,强烈建议不要使用模型,而是使用实际表
为什么?将所有内容制作为模型有哪些弊端?我认为采用统一的方式在数据库中声明表看起来更干净。同样,有可能以后某个时间,开发人员将需要直接访问那些映射记录,而不是通过需要模型的关系来访问。
我正在尝试在此关联表中插入角色数据:
class Association(db.Model):
__tablename__ = 'associations'
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
team_id = db.Column(db.Integer, db.ForeignKey('teams.id'), primary_key=True)
role = db.Column(db.String)
user = db.relationship("User", back_populates="teams")
team = db.relationship("Team", back_populates="users")
Run Code Online (Sandbox Code Playgroud)
它链接到另外两个表:
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String)
username = db.Column(db.String, nullable=False, unique=True, index=True)
password_hash = db.Column(db.String)
teams = db.relationship("Association", back_populates="user")
class Team(db.Model):
__tablename__ = 'teams'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String)
player = db.Column(db.String)
users = db.relationship("Association", back_populates="team")
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在关联表中插入角色时:
t = Team.query.filter_by(id=team_name1_id).first()
a …Run Code Online (Sandbox Code Playgroud)