Приветствую. Пытаюсь разобраться в Python и пишу бота для телеграм. Суть проблемы: Достаю из БД записанные ранее ID для массовой рассылки какого-либо объявления, но видимо что-то накосячил с парсингом и он выдаёт данные со скобками и запятыми, помогите. Как грамотно обработать, чтобы не было скобок и запятой. Надеюсь доходчиво объяснил проблему. Сорян, не силён пока в этом Код: #Объявление def newAd(message): with sqlite3.connect("database.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con: cur = con.cursor() cur.execute("SELECT * FROM users") userbase = [] while True: row = cur.fetchone() if row == None: break userbase.append(row) print("test: " + str(row)) if len(userbase) > 1: for z in range(len(userbase)): #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text) print("debug1: " + str(userbase[z])) else: #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text) print("debug2: " + str(userbase[0])) if con: con.close() Код #Объявление def newAd(message): with sqlite3.connect("database.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con: cur = con.cursor() cur.execute("SELECT * FROM users") userbase = [] while True: row = cur.fetchone() if row == None: break userbase.append(row) print("test: " + str(row)) if len(userbase) > 1: for z in range(len(userbase)): #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text) print("debug1: " + str(userbase[z])) else: #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text) print("debug2: " + str(userbase[0])) if con: con.close() Скриншот консоли:
Я не шарю но есть такой код с рассылки # Рассылка сообщений def admin_rassilka(message): rassilka = message.text bot.send_message(message.from_user.id, 'Запустить рассылку? Введите "Да", чтобы начать рассылку, либо же "Нет", чтобы отменить ее') bot.register_next_step_handler(message, admin_rassilka2, rassilka) # Рассылка сообщений_2 def admin_rassilka2(message, rassilka): con = sqlite3.connect("dannie_2.db") cur = con.cursor() if message.text == "Да": bot.send_message(message.from_user.id, "Рассылка началась", reply_markup=keyboard_admin()) cur.execute("SELECT id FROM users") id = cur.fetchall() for id in id: for id in id: try: bot.send_message(id, f"{rassilka}") time.sleep(1) except: pass from casino_bot import get_text_message_admin bot.register_next_step_handler(message, get_text_message_admin) else: bot.send_message(message.from_user.id, "Рассылка отменена", reply_markup=keyboard_admin()) from casino_bot import get_text_message_admin bot.register_next_step_handler(message, get_text_message_admin) Код # Рассылка сообщений def admin_rassilka(message): rassilka = message.text bot.send_message(message.from_user.id, 'Запустить рассылку? Введите "Да", чтобы начать рассылку, либо же "Нет", чтобы отменить ее') bot.register_next_step_handler(message, admin_rassilka2, rassilka) # Рассылка сообщений_2 def admin_rassilka2(message, rassilka): con = sqlite3.connect("dannie_2.db") cur = con.cursor() if message.text == "Да": bot.send_message(message.from_user.id, "Рассылка началась", reply_markup=keyboard_admin()) cur.execute("SELECT id FROM users") id = cur.fetchall() for id in id: for id in id: try: bot.send_message(id, f"{rassilka}") time.sleep(1) except: pass from casino_bot import get_text_message_admin bot.register_next_step_handler(message, get_text_message_admin) else: bot.send_message(message.from_user.id, "Рассылка отменена", reply_markup=keyboard_admin()) from casino_bot import get_text_message_admin bot.register_next_step_handler(message, get_text_message_admin)
# Добавляем пользователю данные id = message.chat.id name = (f"{message.chat.first_name} {'|'} {message.chat.last_name}") status = 0 balance = 0 last_popolnenie = 0 referals = 0 ref_balance = 0 con = sqlite3.connect("dannie_2.db") cur = con.cursor() cur.execute(f"INSERT INTO users (id,name,status,balance,last_popolnenie,referals,ref_balance,boss) " f"VALUES ({id},\"{name}\",{status},{balance},{last_popolnenie},{referals},{ref_balance},{boss})") con.commit() Код # Добавляем пользователю данные id = message.chat.id name = (f"{message.chat.first_name} {'|'} {message.chat.last_name}") status = 0 balance = 0 last_popolnenie = 0 referals = 0 ref_balance = 0 con = sqlite3.connect("dannie_2.db") cur = con.cursor() cur.execute(f"INSERT INTO users (id,name,status,balance,last_popolnenie,referals,ref_balance,boss) " f"VALUES ({id},\"{name}\",{status},{balance},{last_popolnenie},{referals},{ref_balance},{boss})") con.commit()
Прикол в том, что методом fetchone ты берешь кортеж с одним id, соответственно ты и получаешь скобки и запятую, в примере выше решение
Pandazz, да. С этим разобрался. IDs выдаёт правильно. Но теперь выдаёт ошибку. Думаю связано с циклом while True. Он захватывает что-то лишнее
Разобрался. Рабочий код def newAd(message): with sqlite3.connect("shopBD.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con: cur = con.cursor() cur.execute("SELECT userid FROM users") userbase = [] while True: try: row = cur.fetchone()[0] print("test: " + str(row)) userbase.append(row) except: break if len(userbase) > 1: for z in range(len(userbase)): #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text) print("debug1: " + str(userbase[z])) time.sleep(5) else: #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text) print("debug2: " + str(userbase[0])) if con: con.close() Код def newAd(message): with sqlite3.connect("shopBD.sqlite", detect_types = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES) as con: cur = con.cursor() cur.execute("SELECT userid FROM users") userbase = [] while True: try: row = cur.fetchone()[0] print("test: " + str(row)) userbase.append(row) except: break if len(userbase) > 1: for z in range(len(userbase)): #bot.send_message(userbase[z], f" **Объявление!**\n" + message.text) print("debug1: " + str(userbase[z])) time.sleep(5) else: #bot.send_message(userbase[0], f" **Объявление!**\n" + message.text) print("debug2: " + str(userbase[0])) if con: con.close()