【发布时间】:2021-02-12 07:08:40
【问题描述】:
我在使用 Sqlalchemy 创建 Orders 和 ProductOrders 表之间的链接时遇到问题。我需要链接 order_id,它同时存在于 Orders 表和 ProductOrders 表中,以便从商店查询订单并获取产品数据。我正在使用 BigCommerce API,因此 order_id 仅对每个特定商店都是唯一的,而不像 Shopify API 那样在全球范围内是唯一的。
order_id 是我希望创建的链接,但它仅对 Store 表中的每个 store.id 都是唯一的,因此我无法进行简单的连接,因为 order_id 本身并不是唯一的。我是使用 Store 表来链接这种多对多关系,还是需要使用已经将 store_id 和 user_id 链接在一起的 StoreUser 表?我感到很困惑。任何帮助将不胜感激。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
bc_id = db.Column(db.Integer, nullable=False)
email = db.Column(db.String(120), nullable=False)
storeusers = relationship("StoreUser", backref="user")
class StoreUser(db.Model):
id = db.Column(db.Integer, primary_key=True)
store_id = db.Column(db.Integer, db.ForeignKey('store.id'), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
admin = db.Column(db.Boolean, nullable=False, default=False)
class Store(db.Model):
id = db.Column(db.Integer, primary_key=True)
store_hash = db.Column(db.String(16), nullable=False, unique=True)
access_token = db.Column(db.String(128), nullable=False)
scope = db.Column(db.Text(), nullable=False)
admin_storeuser_id = relationship("StoreUser",
primaryjoin="and_(StoreUser.store_id==Store.id, StoreUser.admin==True)")
storeusers = relationship("StoreUser", backref="store")
store_orders_id = relationship("Orders",
primaryjoin="(Orders.store_id==Store.id)")
store_orders = relationship("Orders", backref="store", cascade="all, delete")
store_product_orders_id = relationship("ProductOrders",
primaryjoin="(ProductOrders.store_id==Store.id)")
store_product_orders = relationship("ProductOrders", backref="store", cascade="all, delete")
class Orders(db.Model):
id = db.Column(db.Integer, primary_key=True)
store_id = db.Column(db.Integer, db.ForeignKey('store.id'), nullable=False)
order_id = db.Column(db.Integer,nullable=False)
date_created = db.Column(db.DateTime, nullable=False)
class ProductOrders(db.Model):
id = db.Column(db.Integer, primary_key=True)
store_id = db.Column(db.Integer, db.ForeignKey('store.id'), nullable=False)
order_id = db.Column(db.Integer, nullable=False)
product_id = db.Column(db.Integer, nullable=False)
base_price = db.Column(db.Float, nullable=False)
【问题讨论】:
标签: python sqlalchemy bigcommerce