@Nika980

Питон не видит таблицу Sqlite, что делать?

По видеоуроку ХаудиХо попыталась подключить базу данных к боту телеграм, сделала все, как делал он в видео, однако вылезает ошибка "Error no such table: users"
Захожу в таблицы и вижу таблицу "users" своими глазами, а питон не видит.
Что с этим делать?

import sqlite3
import telebot
import random
from telebot import types

try:
    conn = sqlite3.connect("Database.db")
    cursor = conn.cursor()

    cursor.execute("INSERT OR IGNORE INTO 'users' ('user_id') VALUES (?)", (1000,))
    users = cursor.execute("SELECT * FROM 'users'")
    print(users.fetchall())

    conn.commit()

except sqlite3.Error as error:
    print("Error", error)

finally:
    if(conn):
        conn.close()
bot = telebot.TeleBot('TOKEN')
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
        bot.send_message(message.from_user.id, f"Привет, {message.from_user.first_name}")
        markup = types.InlineKeyboardMarkup()
        button1 = types.InlineKeyboardButton('МОСКВА', callback_data='1')
        button2 = types.InlineKeyboardButton('ЛЮБЕРЦЫ', callback_data='2')
        button3 = types.InlineKeyboardButton('КОРОЛЕВ', callback_data='3')
        markup.row(button1, button2)
        markup.row(button3)
        bot.send_message(message.from_user.id, f"Выберите город", reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def query_handler(call):
    bot.answer_callback_query(callback_query_id=call.id)
    
    answer = ''
    if call.data == '1':
        markup = types.InlineKeyboardMarkup()
        button23 = types.InlineKeyboardButton('Набор наклеек v1', callback_data='23')
        button24 = types.InlineKeyboardButton('Набор наклеек v2', callback_data='24')
        button25 = types.InlineKeyboardButton('Набор наклеек v3', callback_data='25')
        markup.row(button23)
        markup.row(button24)
        markup.row(button25)
        bot.send_message(call.message.chat.id, f"Ваше предпочтение", reply_markup=markup)
        bot.answer_callback_query(callback_query_id=call.id) 
        answer = ''
bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
по видеоуроку ХаудиХо

Ну собственно проблема уже в этом. Эти видяшки почти ничего не объясняют, а просто "делай как я". Нужно как следует учить язык, боты - не самая тривиальная вещь.

А вообще galaxy выше прав. Вы указываете базу данных вот так: sqlite3.connect("Database.db")
Если не помните, это то, что называется "относительный путь", который отсчитывается относительно текущего рабочего каталога. Проблема в том, что текущий рабочий каталог при запуске скрипта может быть разным - это совершенно необязательно каталог, где лежит скрипт (хотя часто может им быть). Факторов, влияющих на текущий рабочий каталог, очень много, и лучше на него не полагаться.
Надежнее узнать полный путь до каталога скрипта, и использовать его для построения пути до рабочих файлов скрипта. Например, так:
import sys
import pathlib
script_path = pathlib.Path(sys.argv[0]).parent  # абсолютный путь до каталога, где лежит скрипт
conn = sqlite3.connect(script_path / "Database.db")  # формируем абсолютный путь до файла базы

Вот после этого можно быть уверенным, к какой базе обращается бот.
Ответ написан
Ваш ответ на вопрос

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

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