Шаг 3: Урок 3

Следующее руководство 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.

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.

Ответ 1

Вы путаетесь между файловыми системами Windows и UNIX.

Узнайте, где на компьютере существует файл sqllite.exe. скажем, он находится в C:\sqllite. Затем вам также нужно определить, где вы создадите файл базы данных. /tmp/flaskr.db предназначен для файловой системы UNIX. В окнах вы должны указать точный путь или в текущем рабочем каталоге. скажем, это 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 = 'C:\flasktutorial\flaskr.db'

Ответ 2

Вы активировали virtualenv и установленную колбу?

колба должна иметь 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)
  • Создайте пустой файл flaskr.db в tmp

После этого он работает для меня.

Ответ 3

Как вы можете наблюдать из журналов ошибок, ошибка возникает при подключении DB

sqlite3.OperationalError: невозможно открыть базу данных.

И поскольку этот шаг вам не удалось,

sqlite3/tmp/flaskr.db < schema.sql

Вы можете легко понять, что требуется этот шаг. Теперь, чтобы решить эту ошибку, просто вам нужно установить sqlite3, В ubuntu вы можете установить sqlite3 как,

apt-get install sqlite3

После установки ваша программа будет работать нормально, как ожидалось.

Ответ 4

Я не уверен, что эти советы напрямую применимы к ПО, но они приземлили меня здесь, поэтому, возможно, это будет полезно.

Обязательно проверьте файл README в каталоге flaskr, который указывает на запуск 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:

Сначала вы устанавливаете Sqlite3 из здесь.

После установки вам нужно создать файл с именем flaskr.db, расположение этого файла должно быть /myproject/venv/bin/flaskr/tmp.

Следующий шаг - команда запуска

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

Я получил адрес файла из дома.

Следующий шаг - запуск оболочки python, запуск этого кода

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

Вот оно.