@Swek09

Sqlite3 Как проверить существование записи?

Когда перезапускаешь бота с команды старт то бот вылетает,
библиотека бота(pyTelegramBotAPI)
import sqlite3
import telebot
from telebot import types


token='Токен'
bot=telebot.TeleBot(token)
conn = sqlite3.connect('db/Database.db', check_same_thread=False)
cursor = conn.cursor()




def db_table_val(User_id: int, User_name: str, User_surname: str, Username: str):
	cursor.execute('INSERT INTO Users (User_id, User_name, User_surname, Username) VALUES (?, ?, ?, ?)', (User_id, User_name, User_surname, Username))
	conn.commit()


@bot.message_handler(commands=['start'])
def button_message(message):
    us_id = message.from_user.id
    us_name = message.from_user.first_name
    us_sname = message.from_user.last_name
    username = message.from_user.username
    db_table_val(User_id=us_id, User_name=us_name, User_surname=us_sname, Username=username)
    bot.send_message(message.chat.id,'Привет',reply_markup=markup)
bot.infinity_polling(none_stop=True)


Вот так выглядит База данных:
62c85896aaca3760909686.png
  • Вопрос задан
  • 861 просмотр
Решения вопроса 1
OSMANOF
@OSMANOF
Segmentation fault
...
user = cursor.execute('SELECT * FROM users WHERE id=%d' % us_id).fetchall();
if user:
    # пользователь есть

else:
    # его нет
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kwarsk
Здрвствуйте, помогите пожалуйста, вот код:
import telebot
import sqlite3
conn = sqlite3.connect('adcadczscbd.sqlite3', check_same_thread=False)
cursor = conn.cursor()

bot = telebot.TeleBot("5739726750:AAE1ysradDAVUfAwGNRyhlObyoj6i4TR7CU")
@bot.message_handler(commands=['register'])
def get_text_messages(message):
usernam = message.from_user.username
data = cursor.execute(f"SELECT * FROM users WHERE usernames = {usernam}").fetchone()
if data is None:
username = [message.from_user.username]
cursor.execute("INSERT INTO users VALUES (?)", username)
conn.commit()
bot.reply_to(message, 'Поздравляю! Ты зарегистрировался')
else:
bot.reply_to(message, 'Ты уже зарегистрирован')

bot.infinity_polling(none_stop=True, timeout=0)

А вот вывод:
2022-11-23 09:22:02,205 (__init__.py:964 MainThread) ERROR - TeleBot: "Infinity polling exception: no such column: kwarsk"
2022-11-23 09:22:02,208 (__init__.py:966 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\__init__.py", line 959, in infinity_polling
self.polling(non_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\__init__.py", line 1047, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\__init__.py", line 1122, in __threaded_polling
raise e
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\__init__.py", line 1078, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\util.py", line 154, in raise_exceptions
raise self.exception_info
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\util.py", line 98, in run
task(*args, **kwargs)
File "C:\Users\limba\AppData\Roaming\Python\Python310\site-packages\telebot\__init__.py", line 6086, in _run_middlewares_and_handler
result = handler['function'](message)
File "E:\Bot\adcadczsc.py", line 10, in get_text_messages
data = cursor.execute(f"SELECT * FROM users WHERE usernames = {usernam}").fetchone()
sqlite3.OperationalError: no such column:
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы