asyncpg icon indicating copy to clipboard operation
asyncpg copied to clipboard

Not accepting str as value for interval/date columns

Open riwu opened this issue 1 year ago • 2 comments

  • asyncpg version: 0.29.0
  • PostgreSQL version: 15.7
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce the issue with a local PostgreSQL install?: local
  • Python version: 3.11
  • Platform: Windows
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: Yes
  • If you built asyncpg locally, which version of Cython did you use?: N/A
  • Can the issue be reproduced under both asyncio and uvloop?: yes

I am using asyncpg as the driver for SQLAlchemy.

class Table(Base):
    __tablename__ = 'table'
    interval: Mapped[timedelta]

session.add(Table(interval='1 min'))

With the above code, it throws this error: sqlalchemy.exc.DBAPIError: (sqlalchemy.dialects.postgresql.asyncpg.Error) <class 'asyncpg.exceptions.DataError'>: invalid input for query argument $9: '1 min' ('str' object has no attribute 'days')

However, Postgresql accepts '1 min' as a value to an interval column. Why is asyncpg forbidding str even though Postgresql accepts it in this case?

riwu avatar Jul 25 '24 07:07 riwu

and Not accepting str as value for int

class Table(Base):
    __tablename__ = 'table'
    num: Mapped[int]

session.add(Table(num='111'))
session.commit()

it throws this error:

<class 'asyncpg.exceptions.DataError'>  ('str' object cannot be interpreted as an integer)

W0504 avatar Nov 08 '24 02:11 W0504

Answer here: https://github.com/MagicStack/asyncpg/issues/1016#issuecomment-1474906581

alserious avatar Feb 05 '25 08:02 alserious