Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách chuyển đổi truy vấn con vô hướng SQL thành biểu thức SQLAlchemy

Sử dụng as_scalar() hoặc 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)

Sử dụng as_scalar() giới hạn các cột và hàng được trả về là 1, vì vậy bạn không thể lấy toàn bộ đối tượng mô hình bằng cách sử dụng nó (dưới dạng query(PropertyValuation) là một lựa chọn của tất cả các thuộc tính của PropertyValuation ), nhưng chỉ nhận được định giá thuộc tính hoạt động.

Không cần phải vượt qua nó sau này. Cách khai báo truy vấn con hiện tại của bạn vẫn ổn vì SQLAlchemy có thể tự động tương quan TỪ các đối tượng với các đối tượng của một truy vấn kèm theo . Tôi đã thử tạo các mô hình thể hiện phần nào những gì bạn có và đây là cách hoạt động của truy vấn ở trên (có thêm ngắt dòng và thụt lề để dễ đọc):

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. Truy vấn cơ sở dữ liệu MySQL và nhóm theo phạm vi ngày để tạo biểu đồ

  2. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 4

  3. Làm cách nào để khóa đọc / ghi vào các bảng MySQL để tôi có thể chọn và sau đó chèn mà không có các chương trình khác đọc / ghi vào cơ sở dữ liệu?

  4. Cách sử dụng cURL để tìm nạp dữ liệu cụ thể từ một trang web và sau đó lưu nó vào cơ sở dữ liệu của tôi bằng php

  5. Chọn từ bảng mysql WHERE field ='$ array'?