OperationalError:没有这样的表:条目" init_db()"已插入flaskr.py

时间:2016-10-28 03:21:55

标签: python sqlite flask

这是我的flaskr.py的一部分, 我试图在127.0.0.1:5000上运行它,但它给了我一个内部错误。 然后我检查了错误的日志,

File "/var/www/html/flaskr/flaskr.py", line 66, in show_entries (model,sn,user,status))
OperationalError: no such table: entries "

以下是我的代码:

app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('FLASKR_SETTINGS', silent=True)

def init_db():
"""Creates the database."""
    with app.app_context():
        db = get_db()
        with app.open_resource('/var/www/html/flaskr/schema.sql', mode='r') as f:
            db.cursor().executescript(f.read())
        db.commit()


def get_db():
"""
Opens a new database connection if there is none yet for the
current application context.
"""
    top = _app_ctx_stack.top
    if not hasattr(top, 'sqlite_db'):
        sqlite_db = sqlite3.connect(app.config['DATABASE'])
        sqlite_db.row_factory = sqlite3.Row
        top.sqlite_db = sqlite_db
    return top.sqlite_db

@app.route('/')
def show_entries():
    db = get_db()
    with open('/var/www/html/flaskr/hardwarelist.txt') as fl:
        for eachline in fl:
            (model,sn,user,status)=eachline.strip().split(',')
            db.execute('insert into entries (model,sn,user,status) values (?, ?, ?, ?)',(model,sn,user,status))
        fl.close()
    cur = db.execute('select model,sn,status,user from entries order by id desc')
    entries = cur.fetchall()
    return render_template('show_entries.html', entries=entries)

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

我认为错误是由我的" init_db"功能运行不好,所以我无法获得条目表。 但是这里没有关于init_db的错误报告,我应该怎么做才能弄清楚这个问题&解决它?

更新: 有我的schema.sql:

drop table if exists entries;
create table entries (
id integer primary key autoincrement,
model text not null,
sn text not null,
status text not null,
user text not null    
); 

2 个答案:

答案 0 :(得分:1)

在未正确创建db文件的相同情况下,对我有帮助的是从终端运行。

:H

然后再次运行该应用程序

flask init-db

这正确地更新了示例数据库文件。

答案 1 :(得分:0)

我碰巧通过删除这两行来解决问题。

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

并保持:

init_db()

然后一切都运行得很好。但是不知道它是如何引起的...... 回答它只是为了注意和&分享。