【发布时间】:2015-06-07 21:19:13
【问题描述】:
我正在尝试在 SQLAlchemy 中将数据插入到我的数据库中。我已经以SQLAlchemy documentation suggests的方式建立了多对多关系:
association_table = Table('association', Base.metadata,
Column('order_id', Integer, ForeignKey('order.id')),
Column('product_id', Integer, ForeignKey('product.id')),
PrimaryKeyConstraint('order_id', 'product_id'))
class Order(Base):
__tablename__ = 'order'
id = Column(Integer, primary_key=True)
date = Column(Date(timezone=False))
product = relationship('Product', secondary=association_table, backref='order')
class Product(Base):
__tablename__ = 'product'
id = Column(Integer, primary_key=True)
name = Column(String(80), nullable=False)
price = Column(Numeric(2))
如何添加数据以使订单可以包含多个产品并且产品可以包含多个订单(即维护一个正常的多对多连接表)?
由于order 和product 两列都有主键,所以我不能做我通常在一对多关系中做的事情,就像
new_entry = Order(date='2015-06-17', product=Product(id=17, 'hardware', 12.15))
session.add(new_entry)
session.commit()
【问题讨论】:
-
我认为你应该能够做到
Product.order.append(order)。我建议将backref命名为orders,并将relationship命名为products。 -
@adarsh:我无法让
Product.order.append(order)中的append()方法工作——除非你想进一步解释你的答案。 -
使用您的模型(问题中的模型),您应该能够执行以下操作:
new_entry = Order(date=..., product=[Product(...), ...])。重要的是要注意order.product和product.order关系都与一个列表。这就是为什么@adarsh 建议将它们重命名为products和orders。在您的情况下,您确实不需要关联表,因为它不存储任何其他数据。
标签: sql postgresql orm sqlalchemy