背景:我正在制作一个拍卖网站,我正在使用Alchemy。我的表格需要有多对多关系(因为一件艺术品可以有多个用户出价,一个用户可以对多件艺术品出价)
我的问题是:是否可以在我的加入表中添加另一列,以包含用户竞价的id、他们竞价的艺术品的id以及他们竞价的金额?此外,如果是,当我向所述表格添加记录时,我将如何在表格中包含此出价
bid_table = db.Table("bid_table",
db.Column("user_id", db.Integer, db.ForeignKey("user.user_id")),
db.Column("item_id", db.Integer, db.ForeignKey("artpiece.item_id"))
)
class User(db.Model):
user_id = db.Column(db.Integer, unique=True, primary_key=True, nullable=False)
username = db.Column(db.Integer, unique=True, nullable=False)
email = db.Column(db.String(50), unique =True, nullable=False)
password = db.Column(db.String(60), nullable=False)
creation_date = db.Column(db.DateTime, default=str(datetime.datetime.now()))
bids = db.relationship("Artpiece", secondary=bid_table, backref=db.backref("bids", lazy="dynamic"))
class Artpiece(db.Model):
item_id = db.Column(db.Integer, unique=True, primary_key=True, nullable=False)
artist = db.Column(db.String(40), nullable=False)
buyer = db.Column(db.String(40), nullable=False)
end_date = db.Column(db.String(40))
highest_bid = db.Column(db.String(40))
使用SQL炼金术可以做到这一点,但在我看来这是非常麻烦的
SQLAlchemy使用一个名为关联代理的概念将普通表转换为关联表。此表上可以有您想要的任何数据字段,但您必须手动告诉SQLAlchemy哪些列是其他两个表的外键
这是文档中的一个很好的示例
在您的例子中,UserKeyword表是您要为用户/出价场景构建的关联代理表
special_key
列是您要存储的任意数据,如投标金额有关如何访问和创建此类模型的说明,请查看完整的文档
在一个真实的项目中使用了它,它不是特别有趣,如果你能避免它,我会推荐它
https://docs.sqlalchemy.org/en/14/orm/extensions/associationproxy.html
相关问题 更多 >
编程相关推荐