Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Unexpected/undesirable `CAST` of date string to `VARCHAR`

Đang mở
#1,174 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
postgresql, python
Lĩnh vực
backend, databases

Hướng nghiên cứu

Tái hiện trường hợp query.where bằng asyncpg 0.29.0, PostgreSQL 15.7 và Python 3.11, đồng thời so sánh các đầu vào string và datetime. Kiểm tra SQL được tạo ra và việc xử lý tham số xung quanh cast $1::VARCHAR đã được báo cáo. Được xem là hoàn tất khi hành vi so sánh ngày tháng như mong đợi đã được xác lập và được bao phủ bởi một regression test, hoặc khi đã chứng minh rằng vấn đề nằm ở nơi khác.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

  • asyncpg version: 0.29.0
  • PostgreSQL version: 15.7
  • Python version: 3.11
  • Platform: macOS 13.6
  • Do you use pgbouncer?: no
  • Did you install asyncpg with pip?: no (poetry)
start_date = '2024-01-01'
query.where(MyTable.datetime_col >= start_date)

This will fail:

<class 'asyncpg.exceptions.UndefinedFunctionError'>: operator does not exist: timestamp without time zone >= character varying

It seems that this is being casted as VARCHAR:

SELECT * FROM my_table WHERE datetime_col >= $1::VARCHAR

This same filter is valid in Postgres

SELECT * FROM my_table WHERE datetime_col >= '2024-01-01'

It works when using the datetime object:

start_date = dt.datetime.strptime(start_date, "%Y-%m-%d")
query.where(MyTable.datetime_col >= start_date)

Wonder if this is somewhat similar to #1169 in the sense that casting/argument handling invalidates valid SQL statements.

I'd have imagined that castings were performed in obvious and non-breaking scenarios, and scenarios where casting would be necessary, but are not obvious should be handled directly by the user. Breaking valid SQL statements seems counter intuitive IMHO.

Ngôn ngữ chính
Python
Star
8.1k
Fork
469
Merge trung bình
4 ngày 1 giờ
Pull request đã merge (30 ngày)
14

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của MagicStack/asyncpg

Tất cả issue của MagicStack/asyncpg

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.