could not determine data type of parameter $1 asyncpg

Прежде чем кидать мне ссылку или указывать вопрос как дубликат прочитайте.

Я пытаюсь сделать в asyncpg:

conn.fetchrow("SELECT * FROM table WHERE id=$2", None, id)

И получаю такую ошибку:

asyncpg.exceptions.IndeterminateDatatypeError: could not determine data type of parameter $1

И не важно какой тип данных передавать как первый параметр, число, строку, что-то ещё, результат 1. Это больше похоже на баг, если я передаю параметр который не используется, то всегда будет такая ошибка

Казалось бы. Просто сделай:

conn.fetchrow("SELECT * FROM table WHERE id=$1", id)

Но это очень неудобно и сложно при динамическом формировании запроса. Например:

def get_users_list(company_id, role_id=None):
    where_conditions = ["true"]
    if role_id:
        where_conditions.append("role_id=$1")

    users = conn.fetch(
        f"""
            SELECT *
            FROM users
            WHERE
                company_id=$2 AND {" AND ".join(where_conditions)}
        """,
        role_id,
        company_id
    )

    return [dict(user) for user in users]

Высчитывать какой номер надо дать аргументу будет очень сложно. Предвидя ответы "просто сделай role_id вторым аргументом и не передавай если условие не выполняется". А если таких аргументов как role_id много? Как мне понимать какой номер давать этому аргументу?


Ответы (0 шт):