Как проверить значение в 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 есть в базе
→ Ссылка