MagicStack / MagicStack/asyncpg
Unexpected/undesirable `CAST` of date string to `VARCHAR`
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 8.1k
- Forks
- 468
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
- 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.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduce el caso de query.where usando asyncpg 0.29.0, PostgreSQL 15.7 y Python 3.11, comparando las entradas string y datetime. Inspecciona el SQL generado y el manejo de parámetros en torno al cast $1::VARCHAR reportado. Se considera terminado cuando se haya establecido el comportamiento esperado de la comparación de fechas y esté cubierto por una prueba de regresión, o se haya demostrado que el problema corresponde a otro lugar.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- postgresql, python
- Área
- backend, databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100