add database

This commit is contained in:
2026-03-26 12:42:59 +03:00
parent 20531d1029
commit a6c6f061ce
6 changed files with 117 additions and 58 deletions

51
database.py Normal file
View File

@@ -0,0 +1,51 @@
import aiosqlite
import os
# База будет храниться в папке data
DB_PATH = "data/users.db"
async def init_db():
"""Создает таблицу, если она еще не существует."""
os.makedirs("data", exist_ok=True)
async with aiosqlite.connect(DB_PATH) as db:
await db.execute('''
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY,
lat REAL,
lon REAL,
time TEXT
)
''')
await db.commit()
async def get_user(user_id: int):
"""Возвращает данные пользователя по его ID."""
async with aiosqlite.connect(DB_PATH) as db:
db.row_factory = aiosqlite.Row # Чтобы обращаться к колонкам по именам (как к словарю)
async with db.execute("SELECT * FROM users WHERE user_id = ?", (user_id,)) as cursor:
return await cursor.fetchone()
async def save_user_location(user_id: int, lat: float, lon: float):
"""Сохраняет или обновляет только координаты пользователя."""
async with aiosqlite.connect(DB_PATH) as db:
await db.execute('''
INSERT INTO users (user_id, lat, lon)
VALUES (?, ?, ?)
ON CONFLICT(user_id) DO UPDATE SET
lat=excluded.lat,
lon=excluded.lon
''', (user_id, lat, lon))
await db.commit()
async def update_user_time(user_id: int, time: str):
"""Обновляет время отправки для пользователя."""
async with aiosqlite.connect(DB_PATH) as db:
await db.execute("UPDATE users SET time = ? WHERE user_id = ?", (time, user_id))
await db.commit()
async def get_all_users_with_time():
"""Получает всех пользователей, у которых настроено время (для восстановления после перезапуска)."""
async with aiosqlite.connect(DB_PATH) as db:
db.row_factory = aiosqlite.Row
async with db.execute("SELECT * FROM users WHERE time IS NOT NULL") as cursor:
return await cursor.fetchall()