Skip to content

Can't resolve tuple argument types #476

Closed
@LEW21

Description

@LEW21
  • asyncpg version: 0.18.3
  • PostgreSQL version: 11.5
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
    the issue with a local PostgreSQL install?
    : No, it's on docker
  • Python version: 3.7.4
  • Platform: Linux
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: Yes
  • If you built asyncpg locally, which version of Cython did you use?: No
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : Didn't try uvloop.

asyncpg is unable to resolve argument types for the following SQL query:

SELECT * FROM lorem WHERE (first_id, second_id) = $1

Complete example - this script fails:

import asyncio
import asyncpg
import os

async def main():
    conn = await asyncpg.connect(os.environ['DATABASE_URL'])
    try:
        await conn.execute(
            """
            create table "lorem" (
                "first_id" int,
                "second_id" int,
                primary key ("first_id", "second_id")
            );
            """
        )
        await conn.execute("insert into lorem values (5, 5)")
    except asyncpg.DuplicateTableError:
        pass

    sql = "SELECT * FROM lorem WHERE (first_id) = $1"
    print(sql)
    print(await conn.fetch(sql, 5)) # Works

    sql = "SELECT * FROM lorem WHERE (first_id, second_id) = $1"
    print(sql)
    print(await conn.fetch(sql, (5, 5))) # Crashes

asyncio.run(main())

with

SELECT * FROM lorem WHERE (first_id) = $1
[<Record first_id=5 second_id=5>]
SELECT * FROM lorem WHERE (first_id, second_id) = $1
Traceback (most recent call last):
  File "nano.py", line 31, in <module>
    asyncio.run(main())
  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 579, in run_until_complete
    return future.result()
  File "nano.py", line 29, in main
    print(await conn.fetch(sql, (5, 5))) # Crashes
  File "/home/lew21/.venv/lib/python3.7/site-packages/asyncpg/connection.py", line 421, in fetch
    return await self._execute(query, args, 0, timeout)
  File "/home/lew21/.venv/lib/python3.7/site-packages/asyncpg/connection.py", line 1414, in _execute
    query, args, limit, timeout, return_status=return_status)
  File "/home/lew21/.venv/lib/python3.7/site-packages/asyncpg/connection.py", line 1422, in __execute
    return await self._do_execute(query, executor, timeout)
  File "/home/lew21/.venv/lib/python3.7/site-packages/asyncpg/connection.py", line 1434, in _do_execute
    stmt = await self._get_statement(query, None)
  File "/home/lew21/.venv/lib/python3.7/site-packages/asyncpg/connection.py", line 356, in _get_statement
    'in {} attempts'.format(tries)
asyncpg.exceptions._base.InternalClientError: could not resolve query result and/or argument types in 6 attempts

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions