@gvnikolaev

Python телеграм бот база данных sql?

смылс тайов: есть база данных, которая периодически может поменяться.
Есмть телеграм бот, если юзер напишет боту имя то бот должен будет ему отправить фамилию.
Вот мой код: у меня цикл именно по базу идет один раз и бот может мне отправить инфо только по последнему человеку, как сделать чтобы постоянно проверялись все данные?
код прилагаю: заранее спасибо

p = []
m = []

import telebot
import pyodbc
from telebot import apihelper
connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=(тут сервер);DATABASE=(наим базы);UID=(логин);PWD=(пароль)')

cursor = connection.cursor()
    
mySQLquery = ("""
                select  фамилия from OPCFIO)
                  """)
cursor.execute(mySQLquery)
results = cursor.fetchall()
i=0
    
for row in results:
    quality = row[0] {присваиваю имя}
    id = row[1] {присваиваю фамилию}
        
    p.append(id) {добавляю в массив}
    m.append(quality) {добавляю в массив}
    
    for j in range(len(p)):   
        bot = telebot.TeleBot('токен бота')
        apihelper.proxy = {
                       "http": "айпи прокси",
                        "https": "айпи прокси",
                        }
        @bot.message_handler()  
        def start(message):
            print(str(p[j]))
            if message.text == str(p[j]):
                    bot.send_message(message.chat.id, 'Вы выбрали имя '+ str(quality[j])  +"   " + "Фамилия будет" + str(m[j]))
            else:
                    bot.send_message(message.chat.id, 'Такого имени нету {}'.format(message.text))

bot.polling()
  • Вопрос задан
  • 707 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Боюсь, совет тут будет "поучиться программированию и работе с базами данных в целом". Вот кроме шуток.
1. Зачем проходиться по базе циклом, если можно написать простейшей SELECT с фильтрацией блоком WHERE?
2. Зачем объявлять бота и обработчик событий внутри этого цикла? У вас выживет только последняя копия для последней строки.

Короче, итоговый код должен иметь приблизительно такой вид:
@bot.message_handler()  
def start(message):
    cursor = connection.cursor()
    row = cursor.execute('SELECT фамилия FROM OPCFIO WHERE имя = %s LIMIT 1', (message.text,) ).fetchone()
    if row is None:
        # не нашли фамилию, реакцию на это пропиши сам
    else:
        last_name = row[0] # нашли, она лежит в last_name, делаем с ней что нужно

И НИКАКОГО ЦИКЛА ПО ВСЕЙ БД.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы