Телеграмм бот не видит изменения в базе данных в своем потоке
я написал Телеграм бота, который удаляет и выводит записи из бд Mysql в виде таблицы.
командой del:50 - бот удаляет запись с id == 50
командой all - бот выводит все слова в виде таблицы
Проблема: При запуске бота , бот спокойно удаляет запись из бд , но когда вывожу таблицу записей. удаленная запись остается. Если я перезагружу бота , то запись пропадает. но если опять удалить и вывести , то бот в своем потоке не видит изменения в базе. всю голову изломал. что можно сделать ? начало идет от 77 строки при POST запросе
from flask import Flask,request
from models import RuEng,User,db,word_user
from sqlalchemy.sql import text,delete,and_
import telebot
from flask_sqlalchemy import SQLAlchemy
from prettytable import PrettyTable
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1@localhost:27017/rueng'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
token = ""
def send_msg(data):
bot = telebot.TeleBot('1771178136:AAGu6w8JF8UkXSuKbo36_ozRTo2phCXYFnw')
bot.send_message(data['chat_id'], data['text'],parse_mode=data['parse_mode'])
# method = "sendMessage"
# url = f"https://api.telegram.org/bot{token}/{method}"
# requests_session.post(url, data=data)
def make_table(chat_id,utid):
try:
user_id = User.query.filter(User.telegramid == utid).first().id
allw = RuEng.query.filter(RuEng.users.any(id=user_id)).all()
except:
data = {'chat_id':chat_id,'text':'Что то пошло не так, попробуй еще раз'}
send_msg(data)
return
x = PrettyTable()
x.field_names = ["id", "ru", "eng"]
for i in allw:
# x.add_rows([[i.id,i.ru,i.eng]])
# data={'chat_id':chat_id,'text':"dfsdf"}
data = {"chat_id": chat_id, 'text':f"{allw}", 'parse_mode':'MarkdownV2'}
send_msg(data)
def del_word(chat_id,word_id,utid):
try:
user_id = User.query.filter(User.telegramid == utid).first().id
stmt = delete(word_user).where(and_(word_user.columns.uid==user_id, word_user.columns.wid==word_id))
db.session.commit()
db.session.close()
# db.session.expunge(stmt)
data = {'chat_id':chat_id,'text':'Слово удалено','parse_mode':None}
send_msg(data)
except:
data={'chat_id':chat_id,'text':'что-то пошло не так в del_word','parse_mode':None}
send_msg(data)
def parse_message(chat_id,text,utid):
text_list = text.split(':')
if 'all' in text_list:
make_table(chat_id,utid)
elif 'del' in text_list:
try:
word_id = text_list[1]
del_word(chat_id,word_id,utid)
except:
data={'chat_id':chat_id,'text':'неверный формат'}
send_msg(data)
@app.route("/", methods=["GET", "POST",'PUT'])
def receive_update():
if request.method == "POST":
try:
chat_id = request.json["message"]["chat"]["id"]
text = request.json["message"]['text']
utid = request.json["message"]['from']['id']
parse_message(chat_id,text,utid)
except:
data = {'chat_id':'515854171','text':'Я не понял тебя мужик, попробуй еще раз','parse_mode':None}
send_msg(data)
return {"ok": True}
if __name__ == '__main__':
app.run(debug=True)
В RuEng храня слова
в User - пользователи
между ними отношение многие ко многим
схема :
Пример работы с ботом
