2012-01-14 8 views
6

Tôi làm cách nào để thực hiện truy vấn SQL sau bằng SQLAlchemy?Lọc số sql (*) bằng SQLAlchemy

SELECT COUNT (*) 
FROM det_factura 
WHERE company = 31 
    AND date::text LIKE '2011-05% '; 
+0

gì SQL phụ trợ bạn đang sử dụng? – van

Trả lời

6

Nếu det_factura cũng là một đối tượng lập bản đồ, sau đó truy vấn này nên làm điều đó:

qry = (session.query(func.count(det_factura.id)) 
     .filter(det_factura.company==31) 
     .filter(det_factura.date.like('2010-05%')) 
     ) 

Nếu nó là một ví dụ table, là dưới đây nên làm việc:

qry = select([func.count(det_factura.id)], 
     and_(det_factura.company==31, 
      det_factura.date.like('2010-05%') 
      ) 
     ) 
+0

Cảm ơn bạn. SQLSoup tôi đang làm việc với, khi tôi thích ứng mã này để sqlsoup. – leonciokof

+0

hmm .. nhưng nếu bạn không có trường id thì sao? làm thế nào để bạn chỉ nhận được "đếm (*)", có thể trong sự hiện diện của những thứ khác trong danh sách lựa chọn (vì vậy bạn không thể sử dụng sqlalchemy .count())? – shaunc

+2

@shaunc: Bạn luôn có thể thực hiện 'func.count ('*')' để nhận biểu thức SQL 'COUNT (*)'. – van