Уже 2 дня осваиваю PostgreSQL. У меня есть таблица, одна из колонок называется user_id. С помощью питона я написал скрипт, который проверяет наличие user_id в одноименной таблице.
Вот код бд:
async def user_exists(user_id):
conn = await asyncpg.connect(host=host, user=user, password=password, database=database)
await conn.fetchrow("""SELECT * FROM users WHERE user_id = $1;""", user_id,)
await conn.close()
Эту функцию я использую в основном коде следующим образом:
@dp.message_handler(commands=['start'])
async def bot_start(message: types.Message):
if message.chat.type == "private":
if not new_ton.user_exists(message.from_user.id):
await new_ton.add_user(message.from_user.id)
await message.answer(' Добро пожаловать', reply_markup=client_kb.main_buttons)
Проверка срабатывает, повторы невозможны, но в терминале выпрыгивает предупреждение, которое не влияет на работу, однако напрягает:
RuntimeWarning: coroutine 'user_exists' was never awaited
if not new_ton.user_exists(message.from_user.id):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Есть следующий вариант:
@dp.message_handler(commands=['start'])
async def bot_start(message: types.Message):
if message.chat.type == "private":
user_exists = await new_ton.user_exists(message.from_user.id)
if not user_exists:
await new_ton.add_user(message.from_user.id)
await message.answer(' Добро пожаловать', reply_markup=client_kb.main_buttons)
Предупреждение больше не появляется, однако и проверка не проходит, в таблице появляются дубликаты.
Как стоит поступить, в этом случае, подскажите, пожалуйста.
Может, стоит использовать ограничение UNIQUE при создании таблицы?