卡在 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()

&lt; venv &gt; 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 步的主要内容,如果未能解决你的问题,请参考以下文章

flask教程之创建第一个flask应用

CentOS7详细安装教程--图文介绍超详细

FLASK第一个DEMO,小白教程

Flask 教程 第十章:邮件支持

1.VBA教程 VBA Excel宏

VeraCrypt文件硬盘加密使用教程