Задать вопрос
@chtopisatsuda

Добавляю в sqlite3 через python в таблицу данные и выдает ошибку почему?

Здрасвуйте, у меня есть таблица 'db' в которой присутствуют две колонки 'login' 'password'
В коде python я подключился к базе и через INSERT добавляю в login и password значения переменных типа стринг
Ошибка:
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.


Функция добавления в таблицу :
sqlite_insert_with_param = """INSERT INTO db
                              (login, password)
                              VALUES (?, ?);"""
            conn.execute(sqlite_insert_with_param, (loginDb, passwordDb))


Весь код :
# Импорт всех библиотек и модулей
from cgitb import text
from datetime import date
from turtle import home
from dnevnikru import Dnevnik
from pprint import pprint

import sqlite3
import telebot

# ---------------

# Создаю нового бота и ввожу его токен
tb = telebot.TeleBot("5747148691:AAGo59KswgBCWNs3zmUwaTuPF1cPJnEa_6M")
# Удаляю вебхуки
tb.delete_webhook()

#Подключение к бд
conn = sqlite3.connect('./db/dnevnikdb.db', check_same_thread=False)
cursor = conn.cursor()


loginDb = str
passwordDb = str

# Подключение к таблицам


@tb.message_handler(commands=['start', 'go'])
def start_handler(message):
    tb.send_message(message.chat.id, "Привет, отправь логин от дневник.ру")
    tb.register_next_step_handler(message, auth)


def auth(message):
    loginDb = message.text
    if loginDb == message.text:
        print(loginDb)
        tb.send_message(message.chat.id, 'Введи пароль от дневник.ру')    

    tb.register_next_step_handler(message, passw)

@tb.message_handler(content_types=['text'])
def passw(message):
    passwordDb = message.text
    if passwordDb == message.text:
            print(passwordDb)
            tb.send_message(message.chat.id, 'Отлично, вы вошли в дневник.ру')
            sqlite_insert_with_param = """INSERT INTO db
                              (login, password)
                              VALUES (?, ?);"""
            conn.execute(sqlite_insert_with_param, (loginDb, passwordDb))
    tb.register_next_step_handler(message, dnevnikconn)
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Элементарно, Ватсон!
В области видимости переменных функции passw переменная loginDb - не определена, поэтому функция ищет такую переменную в вышележащей области видимости - в глобальной. А там эта переменная определена и ссылается на класс str (кстати, зачем???)
В то же время в области видимости переменных функции auth переменная loginDb определена, поэтому она там не имеет никакого отношения ни к одноименной переменной в глобальной области, ни к одноименной переменной в функции passw.
На вход execute попадает значение str - а это - класс, а не строка, поэтому execute и ругается, что тип не подходящий.

Что делать?
  • Изучить и понять области видимости переменных.
  • Передавать в явном виде необходимые переменные на вход функций, а также явно возвращать их измененные значения из функций и явно передавать в другие функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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