@Tim245

Почему у меня переменная pe не изменяеться а записываеть только первый id пользователя?

Не меняеться на другое число pe вот код
if call.data == 'aple_1':
        
                        
        user_id_vv = call.from_user.id это я получаю id пользвателя что-бы в дальнейшом создать таблицу с названием какой у  него id
        user_id_v = 'a' + str(user_id_vv) тут просто к чифрам а прибовляю

        conn = sqlite3.connect("telebot00.db")  # или :memory: чтобы сохранить в RAM коннектюсь
        cursor = conn.cursor()
        cursor.execute(f"""INSERT INTO users_id (user_id) VALUES(?)""", всё записываеться проверял
                       (user_id_v,))
        conn.commit()
        conn.close()

        con = sqlite3.connect("telebot00.db")
        cur = con.cursor()

        result = cur.execute("""SELECT * FROM users_id""").fetchall() result да он тоже прекрастно работает в него записываеться второй id пользователя
        print(result)
        # Вывод результатов на экран
        count = 0
        for pe in result:
            print(pe) но вот сюда не записываеться 1 id аользователя только 2 дальше можно не смотреть проблема вот тут в этом цикле

            peremenna_user_id = peremenna_user_id + str(pe[1])
            print(peremenna_user_id)
            print(mas_user_id)

            if peremenna_user_id not in mas_user_id:
                mas_user_id.append(str(peremenna_user_id))
                print('Новый пользователь БОТА:  ', mas_user_id[-1])
                conn_new_table = sqlite3.connect("telebot00.db")  # или :memory: чтобы сохранить в RAM
                cursor_new_table = conn_new_table.cursor()
                # Создание таблицы
                cursor_new_table.execute("""CREATE TABLE {}
                                     (id integer NOT NULL, class text, name_original text, name text,
                                                      user_name text, product text, phone text, PRIMARY KEY (ID)
                    )""".format(str(mas_user_id[-1])))

            if peremenna_user_id in mas_user_id:
                peremenna_user_id = ''
                a = 'Яблоко'
                print('Старый пользователь бота:', mas_user_id[-1])
                con_v = sqlite3.connect('telebot00.db')
                cur_v = con_v.cursor()
                cur_v.execute(f"""INSERT INTO {user_id_v} (product) VALUES(?)""",
                               (a, ))
                con_v.commit()
                con_v.close()
  • Вопрос задан
  • 43 просмотра
Решения вопроса 2
@likeviolence
Начнем с того что в sql лучше не возвращать сразу все значения таблицы, об этом можно почитать в мануалах, в вашем случае лучше вернуть именно то что вам нужно. А если отвечать на ваш вопрос. Вы возвращаете всё то есть множество, которое хранит в себе множества данных и затем итерируетесь по нему то есть даже если в этой таблице всего одна колонка то вывод будет таким (123, ) то есть первое значение пустое, а нулевое хранит в себе нужные вам данные, так что скорее всего ошибка в этой строчке
peremenna_user_id = peremenna_user_id + str(pe[1])
Здесь должен быть ноль. А если же я не прав то покажу вам более менее приличную реализацию подобного кода и думаю по ней у вас получится:
cursor.execute('SELECT id, cond, name FROM inventory')
	inventory_user_data = cursor.fetchall()
	print(inventory_user_data)
	for data in inventory_user_data:
		id, condition, name = data
		if id == message.from_user.id:
			bot.send_message(id, f'{name}, {condition}')
Ответ написан
@o5a
SQL запрос без явной сортировки, вроде этого 'SELECT * FROM users_id', не гарантирует упорядоченность результатов (user_id 1 может идти не первым), так что пытаться по нему определять какие-то упорядоченные id неправильно. Да и в целом не особо понятно без пояснений, что предполагалось сделать всеми этими манипуляциями наподобие
peremenna_user_id = peremenna_user_id + str(pe[1])

Если цель - выбрать пользователя по id, то нужно не городить перебор всех значений, а использовать синтаксис SQL, примерно так
cursor.execute('SELECT * FROM users_id WHERE user_id = ?', (user_id, ))

Если такого user_id нет в базе пользователей, то cursor.fetchone() вернет None.

У Вас в целом совершенно неправильный подход к использованию SQL базы данных. Почитайте хотя бы основы SQL. Не должно быть никаких отдельных таблиц под каждого пользователя. Таблицы создаются под сущности (например, пользователь, склад, продукт), id пользователя прописываются в полях.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы