首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶教程: KeyError:‘数据库’

问烧瓶教程: KeyError:‘数据库’
EN

Stack Overflow用户
提问于 2015-12-24 05:00:08
回答 2查看 5.5K关注 0票数 1

我已经搜索并尝试了这个问题的所有解决方案,我发现在flask教程中创建数据库时仍然存在问题:

http://flask.pocoo.org/docs/0.10/tutorial/dbinit/#tutorial-dbinit

前面的stackoverflow以更改数据库中的路径为中心回答了这个问题...或者将实际的flaskr.db文件添加到项目文件(尽管我的印象是sqlite3应该自动生成它)

我使用的是Cloud9 -它在ubuntu上运行-所以原始的/tmp/flaskr.db路径应该可以工作,但它不能。

我的项目的内容是:

代码语言:javascript
复制
/Flaskr
  /static
  /templates
  flaskr.db 
  flaskr.py
  schema.sql

Flaskr.py的内容:

代码语言:javascript
复制
# all the imports
import sqlite3
from contextlib import closing
from flask import Flask, request, session, g, redirect, url_for, \
 abort, render_template, flash

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

DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

def connect_db():
    return sqlite3.connect(app.config['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()



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

对于DATABASE = '‘,我也尝试输入直接路径:

代码语言:javascript
复制
DATABASE = '/home/ubuntu/workspace/flaskr/flaskr.db'

还有(是的,我意识到这是一回事)

代码语言:javascript
复制
DATABASE = '/flaskr/flaskr.db'

我还想指出,flaskr项目下的flaskr.db文件最初并不在那里-但我在排除故障时添加了该文件,以查看是否可以提供它的直接路径。

我得到的错误是:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "flaskr.py", line 28, in init_db
    with closing(connect_db()) as db:
  File "flaskr.py", line 25, in connect_db
    return sqlite3.connect(app.config['DATABASE'])
KeyError: 'DATABASE'

同样,我使用的是在Unix操作系统上运行的Cloud9

EN

回答 2

Stack Overflow用户

发布于 2015-12-24 06:58:22

问题是Flask.config.from_envvar找不到你的设置,因为你在flaskr.py里有这些设置。

您可以使用from_object配置方法,如烧瓶教程所示,如下所示:

代码语言:javascript
复制
app.config.from_object(__name__)

它会找到给定的大写变量名。或者,如果您希望继续使用from_envvar配置(建议使用you can put those items into a .cfg file as documented here.,因为它使您的数据库凭证不受修订控制)

创建一个名为settings.cfg的新文件

代码语言:javascript
复制
DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

并从flaskr.py中删除这些行。然后启动你的应用程序:

代码语言:javascript
复制
$ export FLASKR_SETTINGS=/path/to/settings.cfg
$ python flaskr.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader...
票数 3
EN

Stack Overflow用户

发布于 2015-12-24 07:31:49

您在此处设置了一个变量:

代码语言:javascript
复制
DATABASE = '/tmp/flaskr.db'

...and然后你试图从一个不同的地方阅读它:

代码语言:javascript
复制
sqlite3.connect(app.config['DATABASE'])

您可以简单地:

代码语言:javascript
复制
sqlite3.connect(DATABASE)

或者:

代码语言:javascript
复制
sqlite3.connect('/tmp/flaskr.db')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34443640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档