Skip to content

ValueError exception #62

@lelit

Description

@lelit

With version 0.8.3, the script:

import asyncio
import asyncpg

async def run():
    conn = await asyncpg.connect(host='localhost', port=5432,
                                 database='test',
                                 user='user', password='resu')
    values = await conn.fetch("SELECT * FROM auth.users WHERE name = 'admin'")
    print(values)
    await conn.close()

loop = asyncio.get_event_loop()
loop.run_until_complete(run())

generates the following exception traceback:

Traceback (most recent call last):
  File "p.py", line 12, in <module>
    loop.run_until_complete(run())
  File "/usr/local/python3.6/lib/python3.6/asyncio/base_events.py", line 466, in run_until_complete
    return future.result()
  File "p.py", line 7, in run
    values = await conn.fetch("SELECT * FROM auth.users WHERE name = 'admin'")
  File "/tmp/e/lib/python3.6/site-packages/asyncpg/connection.py", line 270, in fetch
    False, timeout)
  File "asyncpg/protocol/protocol.pyx", line 165, in bind_execute (asyncpg/protocol/protocol.c:55643)
  File "asyncpg/protocol/coreproto.pyx", line 66, in asyncpg.protocol.protocol.CoreProtocol._read_server_messages (asyncpg/protocol/protocol.c:41775)
  File "asyncpg/protocol/coreproto.pyx", line 177, in asyncpg.protocol.protocol.CoreProtocol._process__bind_execute (asyncpg/protocol/protocol.c:43114)
  File "asyncpg/protocol/coreproto.pyx", line 346, in asyncpg.protocol.protocol.CoreProtocol._parse_data_msgs (asyncpg/protocol/protocol.c:44701)
  File "asyncpg/protocol/protocol.pyx", line 406, in asyncpg.protocol.protocol.BaseProtocol._decode_row (asyncpg/protocol/protocol.c:60805)
  File "asyncpg/protocol/prepared_stmt.pyx", line 246, in asyncpg.protocol.protocol.PreparedStatementState._decode_row (asyncpg/protocol/protocol.c:53193)
  File "asyncpg/protocol/codecs/base.pyx", line 205, in asyncpg.protocol.protocol.Codec.decode (asyncpg/protocol/protocol.c:14410)
  File "asyncpg/protocol/codecs/base.pyx", line 150, in asyncpg.protocol.protocol.Codec.decode_range (asyncpg/protocol/protocol.c:13715)
  File "asyncpg/protocol/codecs/range.pyx", line 126, in asyncpg.protocol.protocol.range_decode (asyncpg/protocol/protocol.c:39611)
  File "asyncpg/protocol/codecs/base.pyx", line 315, in asyncpg.protocol.protocol.codec_decode_func_ex (asyncpg/protocol/protocol.c:15511)
  File "asyncpg/protocol/codecs/base.pyx", line 205, in asyncpg.protocol.protocol.Codec.decode (asyncpg/protocol/protocol.c:14410)
  File "asyncpg/protocol/codecs/base.pyx", line 137, in asyncpg.protocol.protocol.Codec.decode_scalar (asyncpg/protocol/protocol.c:13550)
  File "asyncpg/protocol/codecs/datetime.pyx", line 114, in asyncpg.protocol.protocol.date_decode (asyncpg/protocol/protocol.c:22388)
ValueError: ordinal must be >= 1

The auth.users table is defined like this:

test=> \d auth.users
         Table "auth.users"
  Column   |    Type     | Modifiers 
-----------+-------------+-----------
 id        | id_t        | not null
 created   | timestamp_t | not null
 changed   | timestamp_t | 
 name      | code_t      | not null
 password  | code_t      | not null
 email     | email_t     | not null
 validity  | period_t    | not null
 person_id | id_t        | not null

test=> \dD timestamp_t|id_t|code_t|email_t|period_t
                           List of domains
 Schema |    Name     |            Type             | Modifier | Check
--------+-------------+-----------------------------+----------+-------
 public | code_t      | character varying(64)       |          | 
 public | email_t     | character varying(64)       |          | 
 public | id_t        | uuid                        |          | 
 public | period_t    | daterange                   |          | 
 public | timestamp_t | timestamp without time zone |          | 

With version 0.7.0 it works ok, producing something like:

[<Record id=UUID('...') created=datetime.datetime(2016, 12, 24, 12, 20, 21, 599579) changed=datetime.datetime(2016, 12, 24, 17, 40, 50, 144580) name='admin' password='...' email='...' validity=<Range [datetime.date(1, 1, 1), datetime.date(9999, 12, 31))> person_id=UUID('...')>, ...]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions