MagicStack / MagicStack/asyncpg

Unable to use f-string in SqlAlchemy ORM

Abierto
#781 1 comentario 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
8.1k
Forks
469
Merge medio
18 min
PR fusionados (30 d)
4

Descripción

  • asyncpg version: 0.23.0
  • PostgreSQL version: 12
  • Python version: 3.9.4
  • Platform: OSX
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: pipenv
  • If you built asyncpg locally, which version of Cython did you use?: N/A
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : N/A

I'm trying to build a SQL statement with LIKE expression and a pattern but I'm getting an error.

Here is what I had in the code originally:

statement = select(Customer).options(sqlalchemy.orm.joinedload(Customer.transactions)).where(Customer.l_name.ilike(name))

and this worked great.

But if I want to use this statement with a % pattern like this:

statement = f'select(Customer).options(sqlalchemy.orm.joinedload(Customer.transactions)).where(Customer.l_name.ilike("%{name}%"))'

I get this error:

sqlalchemy.exc.ProgrammingError: (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.PostgresSyntaxError'>: syntax error at or near "("
[SQL: select(Customer).options(sqlalchemy.orm.joinedload(Customer.transactions)).where(Customer.l_name.ilike("%%turing%%"))]

It does substitute the variable with a parameter but for some reason it adds an extra pair of percent signs and crashes.
How can I solve this problem?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

No se menciona ningún archivo, prueba ni punto de entrada de asyncpg. Comienza con la expresión de SQLAlchemy proporcionada y el SQL generado; después, verifica si el comportamiento se reproduce en asyncpg o si proviene de construir la instrucción ORM como una cadena; confirma el resultado con las versiones indicadas de PostgreSQL y asyncpg.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
postgresql, python
Área
databases
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
22/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.