Функция не сохраняет в базу данных изменения (sqlite3) в colab Python в проекте Flask

Писал проект изначально в Visual Studio 2019. После тестирования и полной работоспособности, решил продемонстрировать его знакомым, но я так с ngrok не разобрался и кроме меня на сайт зайти никто не смог, тогда решил перенести свой проект в colab там с ngrok проблем у меня не было. После переноса начал тестировать сайт и понял что функция отвечающая за получения данных и commit() не работает, точнее она работает на половину, Одна функция вытаскивает данные при обращении, но вторая функция которая загружает туда данные почему то не работает, я пробовал написать отдельную функцию для commit() но это тоже не произвело никакого результата. Ошибки не выдаёт.

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect(DATABASE)
    return db


# Функция - запрос в БД. В случае необходимости, может закомитить информацию
def query_db(query, args=(), one=False, commit=False):
    cur = get_db().execute(query, args)
    rv = cur.fetchall()
    cur.close()
    if commit:
        get_db().commit()
    return (rv[0] if rv else None) if one else rv


# Создаёт короткую ссылку, пытается вставить в БД, при возникновении ошибки,
# вызванной повторным ключом, перезапускается
def generate_short_link(long_link):
    while True:
        try:
            short_link = "".join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in
                                 range(random.randrange(5, 8)))
            query_db('INSERT INTO links(local_addres,real_addres) VALUES (?, ?)', args=(short_link, long_link),
                     commit=True)
            return short_link
        except:
            pass 

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

Автор решения: dtroyan

Вы закрываете объект до того как делаете commit:

cur = get_db().execute(query, args)
rv = cur.fetchall()
cur.close()
if commit:
    get_db().commit()

А следует сначала делать commit и только потом закрывать объект:

cur = get_db().execute(query, args)
rv = cur.fetchall()
if commit:
    get_db().commit()
cur.close()

И еще момент, все же commit необходимо выносить в отдельную функцию, так как там своя логика работы. Одно действие - одна функция.

→ Ссылка
Автор решения: Parcart

Мне все же удалось решить проблему, проблема была в get_db() Было

def get_db():
    db_path = "/content/gdrive/MyDrive/db/database.db"
    db = sqlite3.connect(db_path) #('database.db')
    db.row_factory = sqlite3.Row
     return db

Стало

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect("/content/gdrive/MyDrive/db/database.db")
    return db
→ Ссылка