2014-10-12 5 views
0

У меня есть приложение Flask, которое читается из локальной базы данных. Так как в нем не было никаких данных, я выложил его один раз с помощью метода add_to_db, который я написал. Когда я проверил базу данных после строки, у нее были данные. Однако, когда я удалил строку add_to_db и перезагрузил страницу, база данных была пуста. По сути, база данных очищается после загрузки страницы.Очистка фляжки DB после pageload

import sqlite3, datetime 
from flask import Flask, request, session, g, redirect, url_for, \ 
    abort, render_template, flash 
from contextlib import closing 
# configuration 
DATABASE = 'valids.db' 
DEBUG = False 
SECRET_KEY = 'development key' 
USERNAME = 'admin' 
PASSWORD = 'default' 
app = Flask(__name__) 
app.config.from_object(__name__) 
def connect_db(): 
    return sqlite3.connect(DATABASE) 


def init_db(): 
    with closing(connect_db()) as db: 
     with app.open_resource('schema.sql', mode='r') as f: 
      db.cursor().executescript(f.read()) 
     db.commit() 


def add_to_db(seq): 
    g.db.execute("insert into emergencies (sequence, begin) values (?, ?);",(seq,datetime.datetime.now())) 


@app.before_request 
def before_request(): 
    g.db = connect_db() 


@app.teardown_request 
def teardown_request(exception): 
    db = getattr(g, 'db', None) 
    if db is not None: 
     db.close() 


@app.route('/<seq>',methods=['GET']) 
def show_entries(seq): 
    print(list(g.db.execute('select * from emergencies'))) 

    add_to_db(seq) 
    print(list(g.db.execute('select * from emergencies'))) 

    statement="select * from emergencies where sequence = '%s';"%seq 
    cur = g.db.execute(statement).fetchall() 
    if len(cur)>0: 
     cur=cur[0] 
    else: 
     return render_template('notfound.html') 
    if cur[3] is None: 
     return render_template('house.html') 
    else: 
     return render_template('notfound.html') 


if __name__ == '__main__': 
    app.run() 

ответ

0

Вы должны совершить изменения:

def add_to_db(seq): 
    g.db.execute("insert into emergencies (sequence, begin) values (?, ?);",(seq,datetime.datetime.now())) 
    g.db.commit() 

или использовать connection as a context manager для автоматической фиксации на Succes:

def add_to_db(seq): 
    with g.db: 
     g.db.execute("insert into emergencies (sequence, begin) values (?, ?);",(seq,datetime.datetime.now())) 
Смежные вопросы