Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите добавить базу данных в тг бот на пайтон

Анна Андреева Ученик (34), на голосовании 1 день назад
первый раз пишу свой тг бот,так что опыта и особых знаний нет. бот довольно простой,выполняет функцию прогноза погоды с помощью ключа openweather,поэтому захотелось добавить базу данных для того,чтобы прогноз приходил пользователю каждый день в выбранном им городе в назначенное самим же пользователем время. базу данных установить у меня вроде как получилось,правда хз как сделать так,чтобы данные в неё сохранялись,а потом,исходя из них пользователю отправлялся прогноз в его городе. прикрепляю мой код конкретно для базы данных


import sqlite3
from databases import Database
from aiogram import Bot
from sqlalchemy import Table
from aiogram.filters.command import Command
from aiogram import Bot, Dispatcher, types, F
import requests
import datetime


weather_key: str = '-'

def request_weather(city, time):
result = requests.get(" https://api.openweathermap.org/data/2.5/forecast ",
params={
'q': city,
'n': time,
'type': 'like',
'units': 'metric',
'lang': 'ru',
'APPID': weather_key,
}).json()
if result.get('cod') != "200":
return 0
else:
return generate_result(result, city)


TOKEN = '-'
bot = Bot(TOKEN)
dp = Dispatcher
@dp.message(Command("Приветствую! Укажи,пожалуйста,название своего населённого пункта и время,в которое тебе удобно будет получать прогноз каждый день. Например: Нижнекамск,8:00. Это значит,что в 8:00 тебе ежедневно будет приходить прогноз погоды на весь день."))

async def cmd_weather(message: types.Message):
city = message.get_args()
if not city:
await message.answer("Пожалуйста,укажи город")
return
weather_data = request_weather(city, time)
if weather_data == 0:
await message.answer(
"К сожалению,такой город не найден. Перепроверь,пожалуйста,точность написания и попробуй ещё раз")
else:
await message.answer(weather_data, parse_mode="HTML")

if not time:
await message.answer("Пожалуйста,укажи время,в которое хочешь получать прогноз погоды")


database = Database('sqlite:///bot.db')
bot.db = "C:\Users\uysha\OneDrive\Рабочий стол\weather-bleather\users wb#1.txt"
connection = sqlite3.connect('bot.db')
cursor = connection.cursor()
connection.close()

async def add_user_to_db(user_id, city, time):
insert_query = f"INSERT INTO users (user_id, city, time) VALUES (?, ?, ?)"
Table(user_id, city, time)
user_id('168408258')
city('Нижнекамск')
time('9:00')
Голосование за лучший ответ
[ ] [ ] Мастер (1206) 1 месяц назад
  1. У тебя должен быть sqlite файл в проекте
  2. У тебя должны быть таблицы в базе
  3. Метод add_user_to_db() вообще хер пойми что делает. ты его создал, нигде не вызвал, так ещё и у тебя команда в переменную забита и на этом все. Её выполнять надо через cur.execute(). Открой мануал и почитай 3 минуты и такой ерунды не будет
Анна АндрееваУченик (34) 1 месяц назад
con = sqlite3.connect("bot.db")
cursor = con.cursor()
cursor.executemany("INSERT INTO user (user_id, city, time) VALUES (?, ?)", ('user_id, city, time'))
con.commit()

как я поняла так? вроде программа ошибки не выдаёт,но сам бот ещё сырой,поэтому пробовать запускать не буду
[ ] [ ] Мастер (1206) Анна Андреева, Можешь отдельное приложение сделать для взаимодействия с базой
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (265160) 1 месяц назад
Таблица нужна для регистрации (подписка и отписка) данных пользователя: id, time_zone, schedule. Бот по расписанию проверяет таблицу на соответствие текущего времени данным пользователя (зона и расписание), получает данные API погоды и отправляет в чат-бот личное сообщение.

Проблемы будут при определении точной погоды в каком-нибудь Задрищенске, которого нет в международной базе городов. В этом случае нужны будут географические координаты, как там https://local-disc.firebaseapp.com/menu/#/weather (погода в Кремле).
Анна АндрееваУченик (34) 1 месяц назад
так,по поводу второго абзаца да,я понимаю,пока что пишу бота больше для опыта,думаю потом добавлю гео,но в первом абзаце вы действительно открыли мне глаза,а то я совсем не учла факт отличия часовых поясов,можете чуть подробнее рассказать каким образом я могу это сделать? просто ранее,повторюсь,опыта работы с бд не было,так что была бы очень благодарна
Похожие вопросы