【问题标题】:HOW TO DO OBJECT RELATIONAL MAPPING(ORM) FOR THIS QUERY?如何为此查询进行对象关系映射(ORM)?
【发布时间】:2020-04-17 14:39:02
【问题描述】:

我正在尝试使用 flask-SQLAlchemy 将我的 sql 查询转换为 python 代码。 我被困在一个查询中。 有表名 flightspassengers,其中 flight_id(passengers) 是外键,id(flights) 是主键。

我的 sql 查询是:

SELECT * FROM flights JOIN
passengers ON flights.id=passengers.flight_id;

请帮我在 python 中转换它

【问题讨论】:

    标签: python mysql python-3.x flask-sqlalchemy


    【解决方案1】:

    试试这个:

    db.session.query(flights,passengers).filter
    (flights.id==passenger.flight_id).all()
    

    【讨论】:

      【解决方案2】:

      假设您的模型看起来像这样(这是纯 sqlalchemy,而不是 flask-sqlalchemy):

      import sqlalchemy as sa
      from sqlalchemy import orm
      
      
      class Flight(Base):
          __tablename__ = 'flights'
      
          id = sa.Column(sa.Integer, primary_key=True)
          name = sa.Column(sa.String(64))
      
          passengers = orm.relationship('Passenger', back_populates='flight')
      
      
      class Passenger(Base):
          __tablename__ = 'passengers'
      
          id = sa.Column(sa.Integer, primary_key=True)
          name = sa.Column(sa.String(64))
          flight_id = sa.Column(sa.Integer, sa.ForeignKey('flights.id'))
      
          flight = orm.relationship('Flight', back_populates='passengers') 
      

      那么这个查询:

      session.query(Flight).join(Passenger)
      

      执行时会生成这条SQL:

      SELECT flights.id AS flights_id, flights.name AS flights_name 
      FROM flights JOIN passengers ON flights.id = passengers.flight_id
      

      并将返回所有至少有一名乘客的飞行对象。

      相比之下,这个查询:

      session.query(Flight, Passenger).filter(Flight.id == Passenger.flight_id)
      

      生成此 SQL:

      SELECT flights.id AS flights_id, flights.name AS flights_name, passengers.id AS passengers_id, passengers.name AS passengers_name, passengers.flight_id AS passengers_flight_id 
      FROM flights, passengers 
      WHERE flights.id = passengers.flight_id
      

      它为每个有航班的乘客返回一个 (Flight, Passenger) 元组。

      请参阅 creating relationshipsquerying with joins 的 Sqlalchemy ORM 教程。

      【讨论】:

        猜你喜欢
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多