文章内容
2019/6/23 18:40:53,作 者: 黄兵
SQLAlchemy多对多查询方式
在上一篇文章中:SQLAlchemy多对多的建表方式,讲了如何通过SQLAlchemy的模型创建数据表,但是建完数据表之后,如何查询也成了一个问题。
下面看看具体的查询实例:
property_name_all = PrivateNumberProperty.query.filter_by(private_number_catalog_id=id) \
.order_by(PrivateNumberProperty.id)
property_name_all.filter_by(id=item.id).first().PrivateNumberTag.all()其中PrivateNumberTag已经在PrivateNumberProperty模型中有所定义。
下面再看一个实例:
# 公共属性值
class PrivateNumberPropertyValue(db.Model):
__tablename__ = 'private_number_property_value'
id = db.Column(db.Integer, primary_key=True)
property_value = db.Column(db.String(128))
alias_value = db.Column(db.String(128))
value_numerical = db.Column(db.Integer)
property_name_id = db.Column(db.Integer, db.ForeignKey('private_number_property_name.id'))
UserShoppingCarts = db.relationship('UserShoppingCart', backref='private_number_property_value', lazy='joined')
PrivateNumberPrices = db.relationship('PrivateNumberPrice', secondary=pp,
backref=db.backref('private_number_property_value', lazy='dynamic'),
lazy='dynamic',
single_parent=True,
cascade='all, delete-orphan')
PrivateNumberPropertyValue与PrivateNumberPrice之间存在多对多的关系。
价格与产品之间存在多对多的关系。当然这个不是很合理,但是在某些场景中,这个也没有什么问题。
具体查询如下:
number_section = PrivateNumberPropertyValue.query.get_or_404(cart_list['NumberSection']) price = number_section.PrivateNumberPrices.first().price
通过PrivateNumberPropertyValue模型里面的PrivateNumberPrices与PrivateNumberPrice表建立了相关联。
下面是我理解的一个草图:

当然这是我个人理解,理解有误欢迎大家指正。
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - SQLAlchemy多对多查询方式
评论列表