Как проверить значение в sqlite3?
у меня тут появилась проблема, мне нужно проверить значение в sqlite. Я делаю бота через aiogram, которому нужно проверять, есть ли в таблице id пользователя а если нет, то добавить его. У меня получился такой код -
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
for row in c:
if row['chat_id'] == message['from']['id']:
await message.reply('test: no')
elif row['chat_id'] != message['from']['id']:
data = [message['from']['id'], str(message['from']['username'])]
c.execute("INSERT INTO имя таблицы VALUES ?,?", data)
conn.commit()
conn.close()
await message.reply('test: ok')
Sqlite3 и Python Ошибки не нашли, но и код не работает как нужно. Сможете помочь? Заранее спасибо
Ответы (2 шт):
Автор решения: D. Violet
→ Ссылка
вот вам пример для понимания логики:
# postgresql
def search_db_users(id_tlgrm):
conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_password, host=db_host)
cursor = conn.cursor()
cursor.execute("SELECT id_tlgrm FROM users WHERE id_tlgrm = %s", (id_tlgrm,))
idt = cursor.fetchone()
if idt is None:
return None
else:
return idt[0]
# sqlite
def search_id_tlg(id_tlgrm):
conn = sqlite3.connect(db)
cursor = conn.execute("SELECT id_tlgrm FROM users WHERE id_tlgrm=?", (id_tlgrm,)).fetchone()
if cursor is None:
conn.close()
return None
else:
conn.close()
idt = cursor[0]
return idt
# pytelegrambotapi
@bot.message_handler(commands=['start'])
def start(message):
if message.chat.id == search_db_users(message.chat.id):
bot.send_message(message.chat.id, 'где-то я тебя видел')
else:
bot.send_message(message.chat.id, 'будем знакомы')
функция search_id_tlg() принимает Telgram id - search_id_tlg(message.chat.id)
запрос SELECT id_tlgrm FROM users WHERE id_tlgrm=? = выбрать id_tlgrm из users где id_tlgrm=id_tlgrm:
- в первом случае (
SELECT id_tlgrm) - колонка - во втором (
WHERE id_tlgrm) - искомое (если имеется в БД) - в третьем (
(id_tlgrm,)) - то что ищем в БД,message.chat.id
Автор решения: beZZZ
→ Ссылка
Можно сделать так.
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
users_id = str(message.from_user.id)
conn = sqlite3.connect('*название базы*')
cur = conn.cursor()
cur.execute(
"SELECT count(*) FROM users WHERE user_id = ?", (users_id,))
info = cur.fetchone()[0]
if info == 0:
# выполняем если id нема в базе
else:
# выполняем если id есть в базе