Skip to content

TypeError: expected str, got int #816

Closed
@pavelschon

Description

@pavelschon

Describe the bug
A TypeError when passed integer to literal()

To Reproduce

import os
import asyncio
from gino import Gino
from sqlalchemy import Integer

db = Gino()

async def main():
    await db.set_bind('FILLME')

    query = db.select([ db.literal(1, type_=Integer).label('test') ], bind=db)

    print(await query.gino.all())

    await db.pop_bind().close()


asyncio.get_event_loop().run_until_complete(main())

Expected result
Expect to get an equivalent of this:

database=> select 1::int as test;
 test 
------
    1
(1 row)

Actual result

Traceback (most recent call last):
  File "asyncpg/protocol/prepared_stmt.pyx", line 155, in asyncpg.protocol.protocol.PreparedStatementState._encode_bind_msg
  File "asyncpg/protocol/codecs/base.pyx", line 193, in asyncpg.protocol.protocol.Codec.encode
  File "asyncpg/protocol/codecs/base.pyx", line 104, in asyncpg.protocol.protocol.Codec.encode_scalar
  File "asyncpg/pgproto/./codecs/text.pyx", line 29, in asyncpg.pgproto.pgproto.text_encode
  File "asyncpg/pgproto/./codecs/text.pyx", line 12, in asyncpg.pgproto.pgproto.as_pg_string_and_size
TypeError: expected str, got int

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test_gino.py", line 18, in <module>
    asyncio.get_event_loop().run_until_complete(main())
  File "lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "test_gino.py", line 13, in main
    print(await query.gino.all())
  File "lib/python3.9/site-packages/gino/api.py", line 127, in all
    return await self._query.bind.all(self._query, *multiparams, **params)
  File "lib/python3.9/site-packages/gino/api.py", line 472, in all
    return await self.bind.all(clause, *multiparams, **params)
  File "lib/python3.9/site-packages/gino/engine.py", line 740, in all
    return await conn.all(clause, *multiparams, **params)
  File "lib/python3.9/site-packages/gino/engine.py", line 316, in all
    return await result.execute()
  File "lib/python3.9/site-packages/gino/dialects/base.py", line 214, in execute
    rows = await cursor.async_execute(
  File "lib/python3.9/site-packages/gino/dialects/asyncpg.py", line 184, in async_execute
    result, stmt = await getattr(conn, "_do_execute")(query, executor, timeout)
  File "lib/python3.9/site-packages/asyncpg/connection.py", line 1711, in _do_execute
    result = await executor(stmt, None)
  File "asyncpg/protocol/protocol.pyx", line 183, in bind_execute
  File "asyncpg/protocol/prepared_stmt.pyx", line 171, in asyncpg.protocol.protocol.PreparedStatementState._encode_bind_msg
asyncpg.exceptions.DataError: invalid input for query argument $1: 1 (expected str, got int)

Environment (please complete the following information):

  • GINO: 1.0.1
  • SQLAlchemy: 1.3.24
  • Asyncpg: 0.24

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugDescribes a bug in the system.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions