Как добавить значение в таблицу из разных хендлеров?

Есть несколько хендлеров (различные вопросы пользователю) и нужно сохранить ответы в одну таблицу, даже если ответы в разное время.

Часть кода с вопросами:

@dp.callback_query_handler(text='up_time', state=None)
async def up_tm_cb(call: types.CallbackQuery, state=None):
    if call.data == 'up_time':
        await bot.send_message(chat_id=call.from_user.id, text='Запиши время подъема: ') #вопрос пользователю
        await call.message.delete()
        #await create_up_time(user_id=call.from_user.id)
        await ProfileStateGroup.up_time.set()


@dp.message_handler(lambda message: not message.text.replace(':', '').isdigit(), state=ProfileStateGroup.up_time)
#@dp.message_handler(re.compile(r'(\d[1-2]:\d{1,2})'), state=ProfileStateGroup.up_time)
async def check_up_time(message: types.Message):
        await message.reply('''
Это не число! Попробуй еще раз!
Запиши время подъема:''')

@dp.message_handler(content_types='text', state=ProfileStateGroup.up_time)
async def time_up_st(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['up_time'] = message.text #объявляю переменную для записи данных
    await message.reply('Отлично, я запомнил время подъема! Что-то еще?', reply_markup=inkb)
    await create_new_up_time(state) #ссылаюсь на функцию бд
    await state.finish()

#второй вопрос пользователю
@dp.callback_query_handler(text='down_time', state=None)
async def down_tm_cb(call: CallbackData, state=None):
    if call.data == 'down_time':
        await bot.send_message(chat_id=call.from_user.id, text="Запиши время отбоя: ") #вопрос
        await call.message.delete()
        await ProfileStateGroup.down_time.set()
        #await create_down_time(user_id=call.from_user.id)

#проверка на число
@dp.message_handler(lambda message: not message.text.replace(':', '').isdigit(), state=ProfileStateGroup.down_time)
async def check_down_time(message: types.Message):
    await message.reply('''
Это не число! 
Запиши время отбоя: ''')

@dp.message_handler(content_types='text', state=ProfileStateGroup.down_time)
async def time_down_st(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['down_time'] = message.text #объявляю переменную для сохранения ответа
    await message.reply ('Отлично, я запомнил время отбоя! Хочешь еще что-то ввести?', reply_markup=inkb)
    await create_new_up_time(state) #вызываю функцию бд
    #await edit_profile_down_time(state, user_id=message.from_user.id)
    await state.finish()

#третий вопрос
@dp.callback_query_handler(text='happy_stat', state = None)
async def callback_query_keyboard(call: CallbackData, state=None):
    if call.data == 'happy_stat':
        await bot.send_message(chat_id=call.from_user.id, text='Запиши свое настроение: ')
        await call.message.delete()
        await ProfileStateGroup.happy_stat.set()
        #await create_happy_stat(user_id=call.from_user.id)

@dp.message_handler(content_types='text', state=ProfileStateGroup.happy_stat)
async def happy_stat_st(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['happy_stat'] = message.text
    await message.reply('Отлично, я записал твою оценку! Чем-то еще могу помочь?', reply_markup=inkb)
    await create_new_up_time(state)
    #await edit_profile_happy_stat(state, user_id=message.from_user.id)
    #await message.answer(f"Мне известны: Время подъёма: , {data['up_time']}, Время отбоя: , {data['down_time']}, Твое настроение: , {data['happy_stat']}")
    await state.finish()

Код с файла базы данных


#создаю файл
    db = sq.connect('basatabl.db')
    cur = db.cursor()
#создаю таблицу в три поля
    cur.execute("""CREATE TABLE IF NOT EXISTS profile( 
    up_time VARCHAR, 
    down_time VARCHAR, 
    happy_stat VARCHAR)  
                """)
    db.commit()
#функция которую потом добавляю в тот файл, должна передавать значение в соответствующее поле
async def create_new_up_time(state):

    async with state.proxy() as data:
        user = cur.execute("INSERT INTO profile (up_time, down_time, happy_stat) VALUES (?, ?, ?)", (data['up_time'], data['down_time'], data['happy_stat']))
        db.commit()

    return user

но на данный момент создается строка с айди пользователя и три пустых строки. Как сделать реализацию, чтобы получив ответ, он добавлялся в строку бд.

Например, результат строки: Up_time: 6:00 down_time: none, happy_stat: Good и если пользователь укажет down_time, чтобы он добавился в пустое значение имеющейся строки, а если пользователь укажет новое значение up_time (там уже есть значение 6:00), то он создает новую строку и туда добавляет результат


Ответы (1 шт):

Автор решения: Инна Ликсакова

вы должны использовать update/ при первом ответе на сообщение вы должны записывать пользователя в бд, а при следующих ответах просто использовать update

def update_user(новые данные):
    db = sq.connect('basatabl.db')
    cur = db.cursor()
    user = cur.execute("UPDATE profile (необходимый столбец) VALUES (?", (новые данные,))
    db.commit()
    db.disconnect()
→ Ссылка