Писал бота на аиограм и столкнулся с проблемой. Создавая базу данных в sqlite(вручную) создаю таблицу, визуально видно, как она создается, но на самом деле ее не существует. Задавал подобный вопрос в другом чате, никто мне не смог внятно ответить, посоветовали изучить основы sqlite. Перечитал, ничего дельного для себя не выделил. Я несколько раз перепроверял код, вечно одна и та же ошибка. Таблицу так же пытался пересоздавать, менять название, удалял базу данных полностью. Решил повторить на втором проекте - та же проблема.
К слову я проверял через sqlitebrowser, таблицы дейсвтительно нет, но если зайти через обычное приложение sqlite, то мог им спокойно пользоваться.
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardMarkup, ReplyKeyboardRemove
from dotenv import load_dotenv
from markups import helps, wlist
from aiogram.dispatcher.filters import Command
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from datab import Database
import os
import logging
load_dotenv()
logging.basicConfig(level=logging.INFO)
bot = Bot(os.getenv('TOKEN'))
storage = MemoryStorage()
db = Database('shopusers.db')
dp = Dispatcher(bot=bot)
@dp.message_handler(commands=['start', 'help'])
async def start_cmd(message: types.Message):
if(not db.user_exists(message.from_user.id)):
db.add_user(message.from_user.id)
await bot.send_message(message.from_user.id, f'{message.from_user.first_name}, C возвращением', reply_markup=helps)
else:
await bot.send_message(message.from_user.id, f'{message.from_user.first_name}, Добро пожаловать', reply_markup=helps)
Это код файла main, я хочу добавить проверку во время ввода команды /start, которая определяет, есть ли пользователь уже в базе или его не существует.
Это файл datab.py:
import sqlite3
class Database:
def __init__(self, db_file):
self.connection = sqlite3.connect(db_file)
self.cursor = self.connection.cursor()
def add_user(self, id):
with self.connection:
self.cursor.execute("INSERT INTO `Users` (`id`) VALUES (?)", (id,))
return self.cursor.execute
def user_exists(self, id):
with self.connection:
result = self.cursor.execute("SELECT * FROM `Users` WHERE `id` = ?", (id,)).fetchall()
return bool(len(result))
sql код базы данных:
CREATE TABLE Users (
id INTEGER PRIMARY KEY
NOT NULL,
user_id INTEGER NOT NULL,
nickname TEXT (60),
time_sub NOT NULL
DEFAULT (0),
signup TEXT DEFAULT setnickname
);
Писал по подобию видеоурока, в первый раз всё вышло.