我有两张桌子:
Products
========================================
ID Name Desc
--------|----------------|--------------
| |
| |
Studies
========================================
ID Title Year
--------|----------------|--------------
| |
| |这两个表通过关系连接:
products_studies_association = Table('products_studies', Base.metadata,
Column('product_id', Integer, ForeignKey('products.id')),
Column('study_id', Integer, ForeignKey('studies.id')))
studies = relationship('Study', secondary=products_studies_association, backref='products')我想product.studies给我与该产品相关的研究,这样的研究是按年排序的(最近的第一次)。下列任何一项工作均未完成:
studies = relationship('Study', secondary=products_studies_association, backref='products', order_by=Study.year.desc())
studies = relationship('Study', secondary=products_studies_association, backref=backref('products', order_by=Study.year.desc()))怎样才是正确的方法?除了身份证之外,我还没有找到很多关于订购的信息。
发布于 2017-09-03 03:02:08
我知道这是旧的,但我偶然发现,在寻找一些稍微不同,但仍然适用的东西,所以也许有人会发现它有用。
将关系添加到主表,而不是关联表。另外,如果显式地将关系添加到每个表中,则不需要使用backref。
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True)
name = Column(Text)
desc = Column(Text)
studies = relationship('Study', secondary='products_studies', order_by='Study.year.desc()')
class Study(Base):
__tablename__ = 'studies'
id = Column(Integer, primary_key=True)
title = Column(Text)
year = Column(String(4))
products = relationship('Product', secondary='products_studies')
class ProductStudyAssoc(Base):
__tablename__ = 'products_studies'
study_id = Column(Integer, ForeignKey('studies.id'), primary_key=True)
product_id = Column(Integer, ForeignKey('products.id'), primary_key=True)如图所示,我将relationship(order_by='Study.year.desc()')放在引号中。当表在引用之前定义时,未引用的表有时可能有效,但引号应该始终有效。如果您希望它是升序的,这是默认的,所以您可以省略.desc()。(我使用String(4)只显示一个选项;Text或Integer可以在这里工作。)
对很多人来说,我都是这样做的,因为我无论如何都在定义这两种关系。对于一对多的用户,您还可以将其放在后台引用中,如下所示(不要忘记从sqlalchemy.orm导入sqlalchemy.orm)。下面的示例假设每项研究只能作为一种产品的证据,但每一种产品都可能得到多项研究的支持。
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True)
name = Column(Text)
desc = Column(Text)
class Study(Base):
__tablename__ = 'studies'
id = Column(Integer, primary_key=True)
title = Column(Text)
year = Column(String(4))
product_id = Column(Integer, ForeignKey('products.id'))
product = relationship('Product', backref=backref('studies', order_by='Study.year.desc()'))https://stackoverflow.com/questions/25948991
复制相似问题