文章内容

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')

PrivateNumberPropertyValuePrivateNumberPrice之间存在多对多的关系。

价格与产品之间存在多对多的关系。当然这个不是很合理,但是在某些场景中,这个也没有什么问题。

具体查询如下:

number_section = PrivateNumberPropertyValue.query.get_or_404(cart_list['NumberSection'])
price = number_section.PrivateNumberPrices.first().price

通过PrivateNumberPropertyValue模型里面的PrivateNumberPricesPrivateNumberPrice表建立了相关联。

下面是我理解的一个草图:

当然这是我个人理解,理解有误欢迎大家指正。


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - SQLAlchemy多对多查询方式

分享到:

发表评论

评论列表