Ошибка записи значения в БД PostgreSQL
Почему-то user_id не записывается в БД postgresql
pool = None
async def init_db():
global pool
pool = await asyncpg.create_pool(
user="postgres",
password="password",
database="usersdb",
host="localhost",
port="5432",
max_size=10,
max_inactive_connection_lifetime=100
)
print('База создана')
async with pool.acquire() as conn:
await conn.execute('''
CREATE TABLE IF NOT EXISTS users(
user_id BIGINT PRIMARY KEY,
username TEXT
)
''')
async def add_user(user_id: int, username: str):
async with pool.acquire() as conn:
await conn.execute(
"INSERT INTO users(user_id, username) VALUES($1, $2)",
user_id, username
)
async def get_users():
async with pool.acquire() as conn:
rows = await conn.fetch("SELECT user_id FROM users")
return [row["user_id"] for row in rows]
пишет что asyncpg.exceptions.DataError: invalid input for query argument $1: 5752585424 (value out of int32 range)
Ответы (1 шт):
Автор решения: Evgenii Evstafev
→ Ссылка
Возможно получится отладить следующим образом:
async def add_user(user_id: int, username: str):
async with pool.acquire() as conn:
try:
# Явно приводим первый параметр к типу BIGINT в SQL
await conn.execute(
"INSERT INTO users(user_id, username) VALUES($1::bigint, $2) ON CONFLICT (user_id) DO NOTHING", # + Добавлен ON CONFLICT для избежания ошибок при дубликатах
user_id, username
)
print(f"Пользователь {user_id} ({username}) добавлен или уже существует.")
except Exception as e:
print(f"Ошибка при добавлении пользователя {user_id}: {e}")