12

遵循 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 <venv> 返回:

"sqlite3" 不是内部或外部命令、可运行程序或批处理文件。

这一步有必要吗?

文件夹项目,2 个文件 schema.sql 和 flaskr.py。

架构.sql

drop table if exists entries;
create table entries (
  id integer primary key autoincrement,
  title string not null,
  text string not null
);

烧瓶器.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.
4

5 回答 5

8

您对 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'
于 2013-04-01T13:45:26.253 回答
4

您是否激活了 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 中):

  1. 更改DATABASE = '/tmp/flaskr.db'DATABASE = '.\\tmp\\flaskr.db'
  2. 在当前文件夹中创建 tmp 文件夹(flaskr)
  3. 在 tmp 中创建一个空的 flaskr.db 文件

之后它对我有用。

于 2015-03-29T02:19:08.477 回答
1

从错误日志中可以看出,连接数据库时出现错误

sqlite3.OperationalError:无法打开数据库。

由于这一步对你来说失败了,

sqlite3 /tmp/flaskr.db < schema.sql

您可以很容易地解释这一步是必要的。现在要解决这个错误,只需安装 sqlite3,在 ubuntu 中,您可以安装 sqlite3,

apt-get 安装 sqlite3

安装后,您的程序将按预期正常工作。

于 2013-04-01T09:57:04.110 回答
1

我不确定这些提示是否直接适用于 PO,但它们让我来到了这里,所以也许会有所帮助。

请务必检查指定从命令行运行README的目录中的文件。flaskrflask --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将安装最新版本。

于 2014-09-17T20:54:46.007 回答
0

仅适用于 linux 用户:

首先从这里安装 Sqlite3 。

安装后你需要创建一个名为flaskr.db的文件,这个文件的位置是/myproject/venv/bin/flaskr/tmp

下一步是运行命令

sqlite3 /home/ddserver/myproject/venv/bin/flaskr/tmp/flaskr.db<schema.sql

我从家里拿了文件地址。

下一步是启动python shell,运行这段代码

>>> from flaskr import init_db
>>> init_db()

就是这样。

于 2016-03-10T05:05:37.660 回答