2011-08-16 43 views
10

Tôi đang cố thực hiện truy vấn sau trong Sqlalchemy.Sử dụng Ngày Sử dụng Sqlalchemy trong Bộ lọc Sử dụng Postgresql

Select * from "Mytable" where Date(date_time_field) = "2011-08-16"; 

Tôi đã thử một số phương pháp. Một số ở đây trên SO. Nhưng dường như không có "thực tế" kể từ khi một số làm Casts chuỗi khác hình thành?!?! và không phải là một ngày đơn giản đơn giản() (Theo ngày tôi có nghĩa là ngày Postgresql không phải là Python One) tại trường ORM.

Có thể ở cấp ORM để khai báo Ngày đơn giản() xung quanh trường được truy vấn không?

Trân trọng António

Trả lời

35

Sử dụng @Ants Aasma Comment.

Và để giữ cho nó sạch sẽ cho mọi tìm kiếm trên web.

from sqlalchemy import Date, cast 
from datetime import date 

my_data = session.query(MyObject).\ 
filter(cast(MyObject.date_time,Date) == date.today()).all() 

Cảm ơn tất cả những ai cố gắng để giải quyết vấn đề này :)

+0

Hoàn hảo! Cảm ơn! – user1914881

1

trong PostgreSQL nếu date_time_field là một trong những lĩnh vực bảng của bạn sau đó Quer phải như thế này. Chọn * từ Mytable trong đó date_time_field = '2011-08-16'

+0

Xin chào, tốt hơn chính xác trường là dấu thời gian không có múi giờ :) – PythonWolf

+0

Dễ dàng cách là chỉ truyền cho đến nay, chọn * từ mytable trong đó cast (date_time_field as date) = '2011-08-16'; viết tắt cho đúc trong pgsql là :: phương pháp như vậy: chọn * từ mytable nơi date_time_field :: date = '2011-08-16'; nhưng đó không phải là tiêu chuẩn đặc tả của SQL và sẽ không thể di chuyển được. Nếu bạn không cần di động thì phương thức :: sạch hơn và dễ nhớ hơn cú pháp. Tuy nhiên, phương thức của bạn với ngày tháng (date_time_field) cũng sẽ hoạt động. –

+0

Xin chào Scott, cảm ơn bây giờ vấn đề đang thực sự chuyển nó vào Sqlalchemy, tôi sẽ thử ngay hôm nay :) – PythonWolf

6

hàm SQL Native có thể được gọi bằng cách sử dụng mô-đun func

from sqlalchemy import func 
from datetime import date 

my_data = session.query(MyObject).filter(
    func.date(MyObject.date_time) == date.today() 
).all() 

Calling func.date

from sqlalchemy import select, func 
print select([func.date('2004-10-19 10:23:54')]) 

sẽ sản xuất bạn SQL sau đây:

SELECT date(:date_2) AS date_1 

Bạn cũng có thể tuyên bố các phím tắt của riêng bạn để chức năng SQL:

from sqlalchemy.sql.functions import GenericFunction 
from sqlalchemy.types import DateTime 

class convert_tz(GenericFunction): 
    """ 
    Sqlalchemy shortcut to SQL convert timezone function 

    :param DateTime datetime 
    :param str from_tz: The timezone the datetime will be converted from 
    :param str to_tz: The timezone the datetime will be converted from 
    :returns: Datetime in another timezone 
    :rtype: DateTime or None if timezones are invalid 

    """ 
    type = DateTime 

Được sử dụng như:

from sqlalchemy import select, func 
print select([func.convert_tz(func.now(), '+00:00', '-05:00')]) 

Nó sẽ tạo SQL sau:

SELECT convert_tz(now(), :param_1, :param_2) AS convert_tz_1 
+0

Bài đăng này đang được tự động gắn cờ là chất lượng thấp vì nó quá ngắn/chỉ có mã. Bạn có muốn mở rộng nó bằng cách thêm một số văn bản để giải thích cách giải quyết vấn đề? – gung

+0

Tôi đã thêm giải thích và tham chiếu đến tài liệu. –

Các vấn đề liên quan