1 / 1 / 0
Регистрация: 11.01.2010
Сообщений: 168

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

12.03.2022, 18:00. Показов 994. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru