坚持Flask教程第3步

时间:2013-04-01 09:34:15

标签: python sqlite python-2.7 flask

遵循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&lt; venv&gt;返回:

  

“sqlite3”无法识别为内部或外部命令,可操作程序或批处理文件。

这一步是否必要?

Folder Project,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.

5 个答案:

答案 0 :(得分: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'

答案 1 :(得分:4)

你是否激活了virtualenv并安装了烧瓶?

烧瓶默认情况下应该有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. 在当前文件夹(flaskr)中创建tmp文件夹
  3. 在tmp
  4. 中创建一个空的flaskr.db文件

    之后,它为我工作。

答案 2 :(得分:1)

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

  

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

由于此步骤失败了,

  

sqlite3 /tmp/flaskr.db< schema.sql文件

您可以轻松地解释此步骤是必要的。 现在要解决这个错误,只需要安装sqlite3,在ubuntu中就可以安装sqlite3了,

  

apt-get install sqlite3

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

答案 3 :(得分:1)

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

请务必检查README目录中指定从命令行运行flaskr的{​​{1}}文件。

如果返回flask --app=flaskr initdb,可能是因为AttributeError: 'Flask' object has no attribute 'cli'未安装。

如果命令返回click,可能是因为安装了较旧版本的Flash,这是flask: command not found所做的。

截至今天,此命令pip install flask将安装最新版本。

答案 4 :(得分:0)

仅限linux用户:

首先从here安装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()

多数民众赞成。