卡在 Flask 教程第 3 步
Posted
技术标签:
【中文标题】卡在 Flask 教程第 3 步【英文标题】:Stuck at Flask tutorial step 3 【发布时间】:2013-03-22 09:08:44 【问题描述】:按照 Flask 教程,运行 Win 7、Python 2.7.3、virtualenv,我被困在第 3 步:创建数据库http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinit
这样的模式可以通过将 schema.sql 文件传递到 sqlite3 命令中来创建,如下所示:
sqlite3 /tmp/flaskr.db < schema.sql
如何运行这个命令,因为 CMD
“sqlite3”不是内部或外部命令、可运行程序或批处理文件。
这一步有必要吗?
文件夹项目,2个文件schema.sql和flaskr.py。
schema.sql
drop table if exists entries;
create table entries (
id integer primary key autoincrement,
title string not null,
text string not null
);
flaskr.py
# all the imports
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \
abort, render_template, flash
from contextlib import closing
# configuration
DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
def connect_db():
return sqlite3.connect(app.config['DATABASE'])
def init_db():
with closing(connect_db()) as db:
with app.open_resource('schema.sql') as f:
db.cursor().executescript(f.read())
db.commit()
if __name__ == '__main__':
app.run()
< venv > python
>>> from flaskr import init_db
>>> init_db()
Trackeback <most recent call last>:
File "<stdin>", line 1, in <module>
File "flaskr.py", line 24, in init_db
with closing (connect_db()) as db:
File "flaskr.py", line 21, in connect_db
return sqlite3.connect(app.config['DATABASE'])
sqlite3.OperationalError: unable to open database.
【问题讨论】:
命令行工具在Windows上称为sqlite3.exe
。
sqlite3.OperationalError
可能是由于 SQLite 无法写入配置的数据库文件(如果它还不存在,它会创建一个)。
已下载 sqlite3.exe, sqlite> sqlite3 /tmp/flaskr.db 有什么帮助吗?
【参考方案1】:
您对 Windows 和 UNIX 文件系统感到困惑。
找出sqllite.exe
文件在计算机上的位置。可以说它在C:\sqllite
。然后,您还需要确定将在何处创建数据库文件。 /tmp/flaskr.db
用于 UNIX 文件系统。在 Windows 上,您应该提供确切的路径或在您当前的工作目录中。假设它是C:\flasktutorial
。
为了安全起见,您可能需要先创建一个空白的flaskr.db
文件。
Open a notepad and create the blank file at `C:\flasktutorial\flaskr.db`
现在你可以运行了:
C:\sqllite\sqllite.exe C:\flasktutorial\flaskr.db < schema.sql
还要确保在您的 flaskr.py 文件中,将 DATABASE 更改为:
DATABASE = 'C:\flasktutorial\flaskr.db'
【讨论】:
为了指导而改变工作目录。我究竟做错了什么?图片相关:s8.postimg.org/j6oovqlx1/picture.png schema.sql 文件存储在哪里?它也在当前工作目录中吗?作为安全措施,我还更新了我的答案,首先创建了 flaskr.db 文件。 ok 那么先尝试创建flaskr.db空白文件再运行命令? 您的最新屏幕截图显示 schema.sql 在 C:\flasktutorial 文件夹中,但您在 C:\sqllite 文件夹中运行命令。复制 C:\sqllite 文件夹中的 schema.sql 或将其命名为 C:\flasktutorial\schema.sql【参考方案2】:您是否激活了 virtualenv 并安装了烧瓶?
flask 默认应该有 sqlite3。我得到了以下错误:
File "flaskr.py", line 26, in connect_db
return sqlite3.connect(app.config['DATABASE'])
sqlite3.OperationalError: unable to open database file`
要解决这个问题,我必须执行以下操作(在 Windows 中):
-
将
DATABASE = '/tmp/flaskr.db'
更改为DATABASE = '.\\tmp\\flaskr.db'
在当前文件夹中创建 tmp 文件夹 (flaskr)
在 tmp 中创建一个空的 flaskr.db 文件
之后它对我有用。
【讨论】:
非常感谢,遇到了完全相同的问题,而且效果很好。【参考方案3】:从错误日志中可以看出,连接数据库时出现错误
sqlite3.OperationalError: 无法打开数据库。
由于这一步对你来说失败了,
sqlite3 /tmp/flaskr.db
您可以轻松理解这一步是必要的。 现在要解决这个错误,只需安装 sqlite3,在 ubuntu 中您可以安装 sqlite3,
apt-get 安装 sqlite3
安装后,您的程序将按预期正常运行。
【讨论】:
这是在 Windows 上。如果数据库文件尚不存在(尽管没有架构),SQLite 创建数据库文件,所以还有其他问题。 这是我的答案,除了在OS X
上使用pip install sqlite3
。【参考方案4】:
我不确定这些提示是否直接适用于 PO,但它们让我来到了这里,所以也许会有所帮助。
请务必检查flaskr
目录中的README
文件,该文件指定从命令行运行flask --app=flaskr initdb
。
如果返回AttributeError: 'Flask' object has no attribute 'cli'
,可能是因为click
没有安装。
如果命令返回flask: command not found
,可能是因为安装了旧版本的Flash,pip install flask
就是这样做的。
从今天开始,此命令pip install https://github.com/mitsuhiko/flask/tarball/master
将安装最新版本。
【讨论】:
【参考方案5】:仅适用于 linux 用户:
首先你从here安装Sqlite3。
安装后你需要创建一个名为flaskr.db的文件,这个文件的位置是/myproject/venv/bin/flaskr/tmp。 p>
下一步是运行命令
sqlite3 /home/ddserver/myproject/venv/bin/flaskr/tmp/flaskr.db<schema.sql
我从家里拿了文件地址。
下一步是启动python shell,运行这段代码
>>> from flaskr import init_db
>>> init_db()
就是这样。
【讨论】:
以上是关于卡在 Flask 教程第 3 步的主要内容,如果未能解决你的问题,请参考以下文章