Изучаю Python походу написания базы, такая ситуацию.
логика файлов:
app/handlers.py
app/classes.py
.env
run.py
в роутер handlers.py вызываю функцию для запроса в базу:
from dotenv import load_dotenv
from aiogram import Bot, Dispatcher
from app.handlers import router
from app.handlers_admin import admin
from app.classes import Database
@router.message()
async def add_user_data(message: Message, bot: Bot, db: Database):
print(message.from_user)
user_data = message.from_user
db.upsert_user(
user_id=user_data.id,
is_bot=user_data.is_bot,
first_name=user_data.first_name or "None",
last_name=user_data.last_name or "None",
username=user_data.username or "None",
language_code=user_data.language_code or "None",
is_premium=user_data.is_premium or False,
)
Файл run.py
import asyncio
import logging
import os
from dotenv import load_dotenv
from aiogram import Bot, Dispatcher
from app.handlers import router
from app.handlers_admin import admin
from app.classes import Database
async def main():
# Загружаем параметры
load_dotenv()
# Инициализируем базу данных
db = Database(
host=os.getenv("DB_HOST"),
port=int(os.getenv("DB_PORT")),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
db=os.getenv("DB_NAME"),
)
db.connect()
# Инициализируем бота и передаем токен
bot = Bot(token=os.getenv("TOKEN"))
# Инициализируем диспетчер
dp = Dispatcher()
# Подключаем к диспетчеру роутеры
dp.include_routers(router, admin)
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Exit")
ну и classes.py:
def upsert_user(
self,
user_id: int,
is_bot: bool,
first_name: str,
last_name: str,
username: str,
language_code: str,
is_premium: bool,
):
# SQL-запрос для вставки или обновления пользователя
sql = """
INSERT INTO users (user_id, is_bot, first_name, last_name, username, language_code, is_premium)
VALUES (?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
is_bot = ?,
first_name = ?,
last_name = ?,
username = ?,
language_code = ?,
is_premium = ?
"""
# Выполняем запрос с передачей параметров
self.execute_query(
sql,
user_id,
is_bot,
first_name,
last_name,
username,
language_code,
is_premium,
is_bot,
first_name,
last_name,
username,
language_code,
is_premium,
)
выходит вот такая вот ошибка
TypeError: add_user_data() missing 1 required positional argument: 'db'
подскажите что не так, если как bot: Bot сообразил, то с db не понимаю