Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168

Что не верно в коде?

12.03.2022, 18:00. Показов 970. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго!

Есть такой код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3 as sq
 
 
def sql_start():
 
    global base, cur
    base = sq.connect('db.db', check_same_thread=False)
    cur = base.cursor()
    if base:
        print('Подключился к БД')
    base.execute('CREATE TABLE IF NOT EXISTS test(name TEXT)')
    base.commit()
 
async def sql_add_command(state):
 
    async with state.proxy() as data:
        cur.execute('INSERT INTO test VALUES (?)', tuple(data.values()))
        base.commit()
FSM ловим текст который ввел пользователь.
data словарь

захожу под юзером 1 ввожу свою почту - ок. запись в БД есть
захожу под юзером 2 ввожу почту - ок. запись в БД есть
захожу под юзером 3 ввожу почту - ок. запись в БД есть
Пробую еще раз ввести другую почту от любого из этих 3 юзеров

и идет ошибка

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

Объясните в чем может быть проблема?

1 юзер — одна почта?

если надо весь код то пришлю

Добавлено через 9 минут
отвечу сам. от одного юзера одна почта. сейчас зашло 5 разных людей и не вывалилась ошибка
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2022, 18:00
Ответы с готовыми решениями:

Дан массив целых чисел. Выяснить: а) верно ли, что сумма элементов, которые больше 20, превышает 100; б) верно ли, что с
Дан массив целых чисел. Выяснить: а) верно ли, что сумма элементов, которые больше 20, превышает 100; б) верно ли, что сумма элементов,...

Что не верно в коде что не приходит выборка из базы?
Подскажите, как правильно составить код, чтобы отправка данных происходила? Ну ни как разобраться не могу из того, что начитался. ...

ДМ. Логически доказать равенство; и что вложение верно, а обратное не верно; построить формулу
Здравствуйте, я понимаю, что тут не любители отвечать очередному Васе Пупкину. Но всё-же, буду очень признателе, если мне напишут...

7
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.03.2022, 19:01
Цитата Сообщение от jenya82 Посмотреть сообщение
Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
Неверное количество предоставленных привязок. В текущем утверждении используется 1, а поставляется 2.
У тебя в data.values() больше одного значения.

Почему так - из этого кода непонятно.

Цитата Сообщение от jenya82 Посмотреть сообщение
global base, cur
Никогда так не делай
0
1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168
12.03.2022, 19:14  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Никогда так не делай
а если уберу работать будет?

Добавлено через 1 минуту
Цитата Сообщение от Garry Galler Посмотреть сообщение
У тебя в data.values() больше одного значения.

ну вот FSM

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class FSMPartnerbaze1(StatesGroup):
    name = State()# Начало ввода почты
# @dp.message_handler(content_types=['text'], text='Марафон', state=None)
async def cm_start(message: types.Message):
    await FSMPartnerbaze1.name.set()
    await message.answer('Пожалуйста, укажите Вашу почту. Она нужна для корректной работы с Вами!')
print("FSM запущена")
 
 
 
# Ловим ответ и пишем в словарь
# @dp.message_handler(state=FSMPartnerbaze1.name)  #временно для понимания
async def get_email(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        message.from_user.username
        data['name'] = message.text
        email = message.text
        await state.update_data(
            {'email': email}
        )
 
        regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
 
        if re.fullmatch(regex, email):
            print("Valid email")
 
            await sqlite_db.sql_add_command(state)
            await state.finish()
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.03.2022, 20:59
Цитата Сообщение от jenya82 Посмотреть сообщение
а если уберу работать будет?
Нет, не будет. Придется переписать код по-нормальному - без глобальных переменных (если ты не курсе - их не принято использовать вообще).

Цитата Сообщение от jenya82 Посмотреть сообщение
ну вот FSM
Мне это ни о чем не говорит. Ответ о причине ошибке я тебе дал - дальше дебажь свой код.

Добавлено через 17 минут
Иллюстрация твоей ошибки:
Python
1
2
3
4
5
6
>>> db.execute("insert into test values(?)", ("123@mail.ru","124@mail.ru"))
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    db.execute("insert into test values(?)", ("123@mail.ru","124@mail.ru"))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
>>>
плейсхолдер (?) у меня один, а вставить я пытаюсь сразу два значения email в один столбец таблицы. Так нельзя.
Однако, если я все-таки хочу вставить сразу две строки в таблицу (в один столбец), то могу сделать так:
Python
1
2
3
>>> db.executemany("insert into test values(?)", [("123@mail.ru",),("124@mail.ru",)])
<sqlite3.Cursor object at 0x0000000002FF8E30>
>>>
То есть передать список кортежей и применив метод executemany.
0
1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168
12.03.2022, 21:11  [ТС]
Цитата Сообщение от jenya82 Посмотреть сообщение
У тебя в data.values() больше одного значения.
то есть надо без круглых скобок?
0
1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168
14.03.2022, 08:18  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
То есть передать список кортежей и применив метод executemany.
Скажите, пожалуйста, как полечить?

Incorrect number of bindings supplied. The current statement uses 3, and there are 4 supplied.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3 as sq
 
 
def sql_start():
 
    global base, cur
    base = sq.connect('data_base/db.db', check_same_thread=False)
    cur = base.cursor()
    if base:
        print('Подключился к БД1')
    base.execute('CREATE TABLE IF NOT EXISTS partners1(user_id INTEGER, name TEXT, username TEXT)')
    base.commit()
 
async def sql_add_command(state):
 
    async with state.proxy() as data:
        cur.execute('INSERT INTO partners1 VALUES (?, ?, ?)', tuple(data.values()))
        base.commit()
когда запускаю бота и ввожу сразу правильный емейл, то в базу пишется корректно.

когда ввожу просто набор букв без собачки, то не прохожу проверку.
так тоже должно быть.

когда ввожу верный емейл заново

то ловлю эту ошибку

executemany решает задачу?

Добавлено через 1 минуту
Цитата Сообщение от Garry Galler Посмотреть сообщение
список кортежей и применив метод executemany.
Ой, теории начитался.

если тут меняю tuple(data.values())) еще ошибки дает

Добавлено через 3 минуты
Цитата Сообщение от Garry Galler Посмотреть сообщение
Однако, если я все-таки хочу вставить сразу две строки в таблицу (в один столбец), то могу сделать так:
то есть когда я пишу не верный емейл он в таблицу тоже пытается записаться?

там же проверка на валидность идет.

вот код где FSM

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram import types, Dispatcher
from create_bot import dp
from aiogram.dispatcher.filters import Text
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemove
import re
import emoji
from data_base import sqlite_db1
 
class FSMPartnerbase1(StatesGroup):
    name = State()# Начало ввода почты
 
# @dp.message_handler(content_types=['text'], text='✳️ Марафон', state=None)
async def cm_start(message: types.Message):
    await FSMPartnerbase1.name.set()
    await message.answer('������ Пожалуйста, укажите Вашу правильную почту. Она нужна для корректной работы с Вами❗️')
print("FSM запущена")
 
# Ловим ответ и пишем в словарь
# @dp.message_handler(state=FSMPartnerbase1.name)  #временно для понимания
async def get_email(message: types.Message, state: FSMContext):
 
    async with state.proxy() as data:
        data['user_id'] = message.from_user.id  #то есть получить от usera его ID
        user_id = message.from_user.id
        await state.update_data(
            {'user_id': user_id}
        )
        data['username'] = message.from_user.username
        username = message.from_user.username
        await state.update_data(
            {'username': username}
        )
        data['name'] = message.text
        email = message.text
        await state.update_data(
            {'email': email}
        )
 
        regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
 
        if re.fullmatch(regex, email):
           print("Valid email")
 
           await sqlite_db1.sql_add_command(state)
           await state.finish()
 
           keyboard = types.InlineKeyboardMarkup()
           keyboard.add(types.InlineKeyboardButton(text="������ Дайте регистрацию",
                                                   url="h."))
           await message.answer(text=f'
                                , reply_markup=keyboard)
           await message.answer(text='Отлично! Нажмите кнопочку ������ Дайте регистрацию', reply_markup=ReplyKeyboardRemove())
 
        else:
            await message.answer("������ Пожалуйста, введите правильную электронную почту. Она необходима для дальнейшей работы с Вами❗️")
            print("Invalid email")
 
def register_handlers_partnerbase1(dp: Dispatcher):
        dp.register_message_handler(cm_start, content_types=['text'], text='✳️ Марафон', state=None)
        dp.register_message_handler(get_email, state=FSMPartnerbase1.name)
то есть я отправляю три значения в базу.

три столбца и создано


и вот судя по ошибке

The current statement uses 3, and there are 4 supplied.


что 4 я пытаюсь передать в таблицу??
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.03.2022, 14:43
Цитата Сообщение от jenya82 Посмотреть сообщение
что 4 я пытаюсь передать в таблицу??
Возьми и распечатай data.values(). В чем проблема то?

P.S.Код твой невозможно читать, поэтому извлечь из него хоть какую-то логику очень больно.
И возьми, наконец, толстую книжку по SQL и прочитай. Вместо написания никому ненужного бота.
У тебя в таблице даже primary key не обозначен.
0
1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168
14.03.2022, 16:57  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
У тебя в таблице даже primary key не обозначен.
да это забыл. уже поставил

решил свой вопрос!

Сам нашел косяк!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2022, 16:57
Помогаю со студенческими работами здесь

Выяснить, верно ли, что |a1b2-a2b1|>=00001, и если верно, то найти решение системы линейных уравнений
Даны действительные числа а1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1b2-a2b1|&gt;=0.0001, и если верно, то найти решение системы...

Даны три числа a,b,c . Выяснить, верно ли, что a<b<c. Ответ получить в текстовой форме: верно или неверно
Даны три числа a,b,c . Выяснить, верно ли, что a&lt;b&lt;c. Ответ получить в текстовой форме: верно или неверно. Программу и блок схему к...

Выяснить, верно ли, что |a1b2 - a2b1| ≥ 0.0001, и если верно то найти решение уравнения a1x+b1y+c1=0 ; a2x+b2y+c2=0
Первое условие я сделал, осталось сделать уравнение. Но я не знаю как решить уравнение с двумя неизвестными переменными в C#. class...

Если маршрутизатор настроен верно и у отправителя в сетевых настройках верно указан айпи адр шлюза, это значит, что паке
Можете подсказать? Если маршрутизатор настроен верно и у отправителя в сетевых настройках верно указан айпи адрес шлюза, это значит, что...

Верно ли оформлена формула в программном коде?
Добрый вечер, форумчане! Возник вопрос - верно ли у меня оформлена формула в программном виде? Math.exp(a - x) / 1.78 *...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru