Skip to content

Can't resolve tuple argument types #476

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:

importasyncioimportasyncpgimportosasyncdefmain():
conn=awaitasyncpg.connect(os.environ['DATABASE_URL'])
try:
awaitconn.execute(
""" create table "lorem" ( "first_id" int, "second_id" int, primary key ("first_id", "second_id") ); """
)
awaitconn.execute("insert into lorem values (5, 5)")
exceptasyncpg.DuplicateTableError:
passsql="SELECT * FROM lorem WHERE (first_id) = $1"print(sql)
print(awaitconn.fetch(sql, 5)) # Workssql="SELECT * FROM lorem WHERE (first_id, second_id) = $1"print(sql)
print(awaitconn.fetch(sql, (5, 5))) # Crashesasyncio.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