Хочу разместить телеграм бота с бд SQLite3 на selectel, но не могу понять где создать бд и как подключить к боту. Может кто-то знает?
У меня есть телеграм бот со стандартными функциями.
Но как только в запросе от пользователя идет обращение к бд. Seletel возвращает такю ошабку:
2023-03-12T09:33:25.697Z stdout:
response = await handler_obj.handler(*args, **partial_data)
2023-03-12T09:33:25.697Z stdout:
File "/home/worker/XPT/bot/XPT.py", line 289, in send_welcome
2023-03-12T09:33:25.697Z stdout:
if not DB.user_exists(message.from_user.id):
2023-03-12T09:33:25.697Z stdout:
File "/home/worker/XPT/bot/XPT.py", line 112, in user_exists
2023-03-12T09:33:25.697Z stdout:
result = self.cursor.execute("SELECT id FROM users WHERE user_id = ?", (user_id,))
2023-03-12T09:33:25.697Z stdout:
sqlite3.OperationalError: no such table: users
2023-03-12T09:33:25.697Z stdout:
ERROR:tornado.access:500 POST /run (10.233.94.14) 155.35ms
2023-03-12T09:33:25.697Z stderr:
The action did not initialize or run as expected. Log data might be missing.
Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </> Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
sqlite3 сам создаст файл БД, если он не существует. Но вот отсутствующие таблицы в БД должен создать бот, при своём запуске.
Запрос CREATE TABLE IF NOT EXISTS ... в помощь.
Я создал бд в SQLiteStudio пример и добавил ее в папку с ботом . При запуске бота с моего пк все проходит отлично, изменения вносятся. Но при загрузке на сервер ничего не происходет. Я предполагаю. Что проблема в том, что нужно как-то создать это бд в selectel и подсоединить.
index_0, либо загрузи файл с БД рядом с ботом, либо выясни, какой запрос вида CREATE TABLE создаст такую же таблицу. Тогда ты сможешь сделать этот запрос ботом при его запуске. Sqlite studio я не пользовался, так что не знаю, позволяет ли она экспортировать таблицу в виде запроса. Но если она позволяет экспортировать базу в виде sql-файла, то его можно будет открыть блокнотом - там должен будет присутствовать вначале запрос на создание таблицы.
Vindicar, я создал такой же запрос в коде
def create_table(self):
self.conn.executescript("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_name TEXT NOT NULL,
user_id INTEGER UNIQUE NOT NULL,
follower BOLLEAN DEFAULT 0,
join_date DATETIME DEFAULT ((DATETIME('now'))) NOT NULL,
follow_date DATETIME NOT NULL DEFAULT ((DATETIME('now'))),
follow_end_date DATITIME,
symbol INTEGER DEFAULT 2000,
drop_symbol_date DATETIME
);""")
return self.conn.commit()
Все также, с моего пк все работет, а сервера selectel отвечают: sqlite3.OperationalError: no such table: users