Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да конвертирате SQL скаларна подзаявка в SQLAlchemy израз

Използвайте as_scalar() , или label() :

subquery = (
    session.query(PropertyValuation.valuation)
    .filter(PropertyValuation.zip_code == Property.address_zip)
    .order_by(func.abs(func.datediff(PropertyValuation.as_of, Sale.date_sold)))
    .limit(1)
)

query = session.query(Sale.agent_id,
                      Sale.property_id,
                      Property.address_zip,
                      # `subquery.as_scalar()` or
                      subquery.label('back_valuation'))\
        .join(Property)

Използване на as_scalar() ограничава върнатите колони и редове до 1, така че не можете да получите целия обект на модела, като го използвате (като query(PropertyValuation) е избран от всички атрибути на PropertyValuation ), но получаване само на оценката атрибутът работи.

Няма нужда да го предавате по-късно. Вашият текущ начин за деклариране на подзаявката е добър, тъй като SQLAlchemy може автоматично съпоставя FROM обекти с тези на обграждаща заявка . Опитах се да създам модели, които донякъде представят това, което имате, и ето как работи заявката по-горе (с добавени прекъсвания на редове и отстъп за четливост):

In [10]: print(query)
SELECT sale.agent_id AS sale_agent_id,
       sale.property_id AS sale_property_id,
       property.address_zip AS property_address_zip,
       (SELECT property_valuations.valuation
        FROM property_valuations 
        WHERE property_valuations.zip_code = property.address_zip
        ORDER BY abs(datediff(property_valuations.as_of, sale.date_sold))
        LIMIT ? OFFSET ?) AS back_valuation 
FROM sale
JOIN property ON property.id = sale.property_id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL полето DATETIME съкращава ISO8601

  2. Какви са разликите между типовете данни BLOB и TEXT в MySQL?

  3. Python - mysqlDB, sqlite резултат като речник

  4. Как да получите размер на blob в PHP или SQL

  5. Използване на MySQLi за вмъкване на данни в база данни