gpt4 book ai didi

Python SQLalchemy 表的多个字段

转载 作者:行者123 更新时间:2023-11-29 21:07:57 25 4
gpt4 key购买 nike

我在使用 SQL Alchemy 时遇到问题,在尝试思考 SQL 模式时遇到了以下问题。

我的架构基于 2 个类:航类和旅行。

行程包含 2 个字段:flights_to 和 Flights_from。任何字段基本上都是航类列表,它可以由一个航类或多个航类(转机航类)组成。

class Trip(Base):
__tablename__ = "Trip"
__table_args__ = {'sqlite_autoincrement': True}
id = Column(Integer, primary_key = True)
flights_to = relationship("Flight", backref="Trip")
flights_from = relationship("Flight", backref="Trip")

class Flight(Base):
__tablename__ = "Flight"
__table_args__ = {'sqlite_autoincrement': True}
id = Column(Integer, primary_key = True)
arrival_airport = Column(String(20))
departure_airport = Column(String(20))
flight_number = Column(Integer)
trip_id = Column(Integer, ForeignKey('Trip.id'))

当我创建相同类型的 2 个字段时会出现问题:

sqlalchemy.exc.ArgumentError: Error creating backref 'Trip' on relationship 'Trip.flights_from': property of that name exists on mapper 'Mapper|Flight|Flight'

我曾考虑过使用 FlightTo 和 FlightFrom 类型的 2 个继承类,并将它们保存在两个不同的表中,但是如果我想将 FlightFrom 用作 FlightTo 该怎么办?航类会在 2 个表中重复吗?

非常感谢您的帮助。

最佳答案

backref 用于在您正在使用关系的其他类上定义新属性。所以你不能有两个同名的属性

您应该将 Flights_from 的 backref 重命名为 Trip 以外的任何其他名称。

然后就可以了。

例如:

class Person(Model):
id = Column(Integer, primary_key=True)
name = Column(String)
address = relationship("Address",backref="address")

class Address(Model):
id = Column(Integer, primary_key=True)
house_no = Column(Integer)
person_id = Column(Integer, ForeignKey('person.id'))

因此您可以通过以下方式访问 house_no 100 的人名:

query_address = Address.query.filter_by(house_no=100).first()

person = query_address.address

这将返回 person 对象。因此,如果你有多个这样的名称,它会给你一个错误

关于Python SQLalchemy 表的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com