2013-04-01 9 views
11

Po tutorialu kolby z systemem Win 7, Python 2.7.3, virtualenv i siedzę w kroku 3: Tworzenie bazy danych http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinitStuck na kolbie Tutorial krok 3

Such a schema can be created by piping the schema.sql file into the sqlite3 command as follows:

sqlite3 /tmp/flaskr.db < schema.sql 

Jak uruchomić tego polecenia, ponieważ CMD < venv> powroty:

"sqlite3" is not recognized as internal or external command, operable program or batch file.

Czy to krok konieczny?

Folder Project 2 pliki schema.sql i 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

Narzędzie wiersza poleceń nazywane jest "sqlite3.exe" w systemie Windows. –

+1

"Wywołanie sqlite3.OperationalError" powodowane jest przez to, że SQLite nie może * zapisać * skonfigurowanego pliku bazy danych (tworzy go, jeśli jeszcze nie istnieje). –

+0

Sciągnięte sqlite3.exe, sqlitie> sqlite3 /tmp/flaskr.db jakąkolwiek pomoc? –

Odpowiedz

8

są zdezorientowani między systemami plików Windows i UNIX.

Dowiedz się, gdzie istnieje sqllite.exe plik na komputerze. powiedzmy, że jest w C:\sqllite. Następnie musisz określić, gdzie utworzysz plik bazy danych. /tmp/flaskr.db jest dla systemu plików UNIX. W systemie Windows należy podać dokładną ścieżkę lub aktualny katalog roboczy. powiedzmy, że jest to C:\flasktutorial.

Aby być bezpiecznym, może chcesz utworzyć pusty plik flaskr.db pierwszy.

Open a notepad and create the blank file at `C:\flasktutorial\flaskr.db` 

Teraz można uruchomić:

C:\sqllite\sqllite.exe C:\flasktutorial\flaskr.db < schema.sql 

Również upewnić się, że w pliku flaskr.py zmienić bazę danych do:

DATABASE = 'C:\flasktutorial\flaskr.db' 
+0

Zmień katalog roboczy dla instrukcji. Co ja robię źle? pic related: http://s8.postimg.org/j6oovqlx1/picture.png –

+0

gdzie jest przechowywany plik schema.sql? Czy znajduje się on również w bieżącym katalogu roboczym? Zaktualizowałem również moją odpowiedź, aby najpierw utworzyć plik flaskr.db jako środek bezpieczeństwa. – codegeek

+0

Tak, jest w tym samym folderze roboczym. –

1

jako yo u można obserwować z dzienników błędów, błąd nadchodzi podczas łączenia DB

sqlite3.OperationalError: unable to open database.

I od tego kroku nie powiodło się dla ciebie,

sqlite3 /tmp/flaskr.db < schema.sql

można łatwo zinterpretować, że ten krok jest niezbędny. teraz, aby rozwiązać ten problem, po prostu trzeba zainstalować sqlite3, w Ubuntu można zainstalować sqlite3 jak

apt-get install sqlite3

Po instalacji program będzie działać dobrze, jak oczekiwano.

+2

To jest w systemie * Windows *. SQLite * tworzy * plik bazy danych, jeśli jeszcze nie istnieje (aczkolwiek bez schematu), więc coś innego jest nie tak. –

+0

To była odpowiedź w moim przypadku, z wyjątkiem użycia 'pip install sqlite3' na' OS X'. – MikeiLL

1

Nie jestem pewien, czy te wskazówki są bezpośrednio stosowane w PO, ale wylądowali tutaj, więc może będzie to pomocne.

Należy sprawdzić plik README w katalogu flaskr, który określa uruchamianie flask --app=flaskr initdb z wiersza poleceń.

Jeśli to zwróci wartość AttributeError: 'Flask' object has no attribute 'cli', może to być spowodowane brakiem instalacji click.

Jeśli polecenie zwróci flask: command not found, może to wynikać z zainstalowania starszej wersji Flasha, czyli z tego, co robi pip install flask.

Na dzień dzisiejszy to polecenie pip install https://github.com/mitsuhiko/flask/tarball/master zainstaluje najnowszą wersję.

4

Czy aktywowano virtualenv i zainstalowano kolbę?

Kolba powinna domyślnie mieć sqlite3. Mam następujący błąd choć:

File "flaskr.py", line 26, in connect_db 
    return sqlite3.connect(app.config['DATABASE']) 
sqlite3.OperationalError: unable to open database file` 

Aby ustalić, które musiałem wykonać następujące czynności (w systemie Windows):

  1. Zmień DATABASE = '/tmp/flaskr.db' do DATABASE = '.\\tmp\\flaskr.db'
  2. Utwórz folder tmp w bieżącym folderze (flaskr)
  3. Utwórz pusty plik flaskr.db w tmp

Po pracy, że jest to dla mnie.

+1

Dziękuję bardzo za to, że miał dokładnie ten sam problem i działało to doskonale. – bkmoney

0

Tylko dla użytkowników systemu Linux:

Najpierw trzeba zainstalować Sqlite3 z here.

Po instalacji należy utworzyć plik o nazwie flaskr.db, lokalizacja tego pliku ma być /myproject/venv/bin/flaskr/tmp.

Następnym krokiem jest uruchomienie komendy

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

Wziąłem adres pliku z domu.

Następny krok to uruchomić Pythona powłokę, należy uruchomić ten kod

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

to wszystko.