如何在SQLAlchemy中为含外键的表创建复合主键?
实现Options表的复合主键(含外键)
在SQLAlchemy中,你可以通过两种常用方式为trackerId(外键)和name字段创建复合主键:
方式一:显式定义主键约束
通过__table_args__属性,使用PrimaryKeyConstraint明确指定复合主键的字段:
db = SQLAlchemy() class Options(db.Model): __tablename__ = 'Options' trackerId = db.Column(db.Integer, db.ForeignKey("Tracker.trackerId")) name = db.Column(db.String) # 定义复合主键 __table_args__ = ( db.PrimaryKeyConstraint('trackerId', 'name'), )
方式二:直接在字段上标记主键
给需要作为复合主键的字段添加primary_key=True参数,SQLAlchemy会自动将多个标记为primary_key=True的字段组合成复合主键:
db = SQLAlchemy() class Options(db.Model): __tablename__ = 'Options' # trackerId作为外键同时是复合主键的一部分 trackerId = db.Column(db.Integer, db.ForeignKey("Tracker.trackerId"), primary_key=True) # name作为复合主键的另一部分 name = db.Column(db.String, primary_key=True)
两种方式的效果完全一致,可根据代码风格偏好选择:
- 方式一更适合需要添加额外表级约束的场景,可读性更强;
- 方式二更简洁,直接在字段定义中完成主键声明。
需要注意的是,trackerId作为外键的属性不会被主键设置影响,它依然能正常关联Tracker表的trackerId字段。
内容的提问来源于stack exchange,提问作者SONU
相关产品推荐
相关产品推荐

