@EVG82

Как подключить к боту sqlite3?

Пытаюсь юзать код:
Создание базы
import sqlite3 as sq

def sql_strt():
    global base, cur
    base = sq.connect('partnerbase1.db')
    cur = base.cursor()
    if base:
        print('Соединился с базой')
    base.execute('CREATE TABLE IF NOT EXISTS base1(name TEXT)')
    base.commit()
async def sql_add_command(state):
    async with state.proxy() as data:
        cur.execute('INSERT INTO base1 VALUES(?,?,?,?)',tuple(data.values()))
        base.commit()


подключение в FSM так как надо вводимый емейл записывать в базу

#@dp.message_handler(commands='Марафон', state=None)
async def cm_start(message : types.Message):
    await FSMPartnerbaze1.name.set()
    await message.answer('Пожалуйста, укажите Вашу почту. Она нужна для корректной работы с Вами!')

 #Ловим ответ и пишем в словарь
#@dp.message_handler(state=FSMPartnerbaze1.name)  #временно для понимания
async def get_email(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        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()


в мейне говорят надо так
async def on_startup():
    print ('бот вышел онлайн')
    sqlite_db.sql_start


ну и не работает

выдает ошибку

NameError: name 'cur' is not defined

Почему она возникает?

Аналогию построения брал отсюда
https://www.youtube.com/watch?v=m0ZRms4p7fc&t=582s
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Ну, у вас же прямым текстом написано - имя cur не найдено.
import sqlite3 as sq

def sql_strt():
    global base, cur
    base = sq.connect('partnerbase1.db')
    cur = base.cursor()
    if base:
        print('Соединился с базой')
    base.execute('CREATE TABLE IF NOT EXISTS base1(name TEXT)')
    base.commit()
async def sql_add_command(state):
    async with state.proxy() as data:
        cur.execute('INSERT INTO base1 VALUES(?,?,?,?)',tuple(data.values()))
        base.commit()

То, что вы написали global base, cur не делает эти переменные глобальными.
Читайте как правильно это делать
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект