Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
asyncpg.exceptions.DataError: entrada no válida para el argumento de consulta $1: 217027642536 (valor fuera del rango int32)

Estoy trabajando en un proyecto que usa FastAPI junto con Pydantic y SQLAlchemy. También estoy usando codificación/bases de datos para administrar las conexiones de la base de datos. Pero por alguna extraña razón, obtengo asyncpg.exceptions.DataError: invalid input for query argument $1: 217027642536 (value out of int32 range) cada vez que intento guardar en la base de datos. Así es como se ve mi código:

database.py

 ... ... currencies = Table( 'currencies', metadata, Column('id', Integer, primary_key=True), Column('name', String(50)), Column('price', Float), Column('price_date', DateTime), Column('price_timestamp', DateTime), Column('market_cap', Integer) ) database = Database(DATABASE_URL)

database_manager.py

 ... ... async def add_currency(payload: Currency): query = currencies.insert().values(**payload.dict()) return await database.execute(query=query)

endpoints.py

 ... ... @endpoints.post('/', response_model=CurrencyOutput, status_code=201) async def add_currency(): data = check_currency_price() payload = Currency( name=data['name'], price=data['price'], price_date=data['price_date'], price_timestamp=data['price_timestamp'], market_cap=data['market_cap'] ) currency_id = await database_manager.add_currency(payload) response = { 'id': currency_id, **payload.dict() } return response

models.py

 ... ... class Currency(BaseModel): name: str price: float price_date: datetime price_timestamp: datetime market_cap: int class CurrencyOutput(Currency): id: int

services.py

 def check_currency_price(): response = httpx.get( 'https://api.nomics.com/v1/currencies/ticker?' + 'key=somerandomAPIkey&ids=BTC&interval=1d,30d&convert=USD' ) return response.json()[0]

No puedo ver nada malo en esto. Alguien, por favor, dígame qué diablos está pasando.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Básicamente, tiene un desbordamiento de enteros, Int32 representa 2^31 - 1 , lo que significa que puede almacenar los valores en el rango -2147483648 a 2147483648 , pero el valor que está tratando de insertar es mayor que 2^31

 2**31 > 217027642536 Out: False

Por lo tanto, debe usar el tipo BigInteger de SQLAlchemy que representa Int64 , también representa 2^63 - 1 que puede almacenar los valores en el rango negativo y positivo 9,223,372,036,854,775,807

 from sqlalchemy import BigInteger currencies = Table( 'currencies', metadata, Column('id', Integer, primary_key=True), Column('name', String(50)), Column('price', Float), Column('price_date', DateTime), Column('price_timestamp', DateTime), Column('market_cap', BigInteger) ) ^^^^^^^^^^

Cambiar el tipo de columna del mercado con BigInteger debería resolver el problema, pero tenga cuidado con los tipos más grandes que usan más memoria.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!