2013-04-01 2 views
11

Nach Flask Tutorial, Win 7 ausgeführt, Python 2.7.3, virtualenv, und ich bin in Schritt 3 fest: Die Datenbank http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinitbei Flask Tutorial Schritt Fest 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 

Erstellen Wie dieser Befehl auszuführen, weil CMD < venv> zurück:

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

Ist dieser Schritt notwendig?

Ordner Projekt, 2 Dateien schema.sql und flasgerr.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

Das Befehlszeilen-Tool heißt unter Windows "sqlite3.exe". –

+1

Der 'sqlite3.OperationalError' würde dadurch verursacht, dass SQLite die konfigurierte Datenbankdatei * nicht schreiben * kann (sie erstellt eine, wenn sie noch nicht existiert). –

+0

Heruntergeladen sqlite3.exe, sqliti> sqlite3 /tmp/flaskr.db Hilfe? –

Antwort

8

Sie sind zwischen Windows- und UNIX-Dateisystemen verwirrt.

Finden Sie heraus, wo sqllite.exe Datei auf dem Computer vorhanden ist. Sagen wir, es ist in C:\sqllite. Dann müssen Sie auch bestimmen, wo Sie die Datenbankdatei erstellen. /tmp/flaskr.db ist für das UNIX-Dateisystem. Unter Windows sollten Sie den genauen Pfad oder in Ihrem aktuellen Arbeitsverzeichnis angeben. sagen wir es ist C:\flasktutorial.

Um sicher zu gehen, möchten Sie vielleicht zuerst eine leere flaskr.db Datei erstellen.

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

Jetzt können Sie laufen:

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

auch sicher, dass in Ihrer flaskr.py Datei, wobei die Datenbank ändern:

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

Wechseln Sie das Arbeitsverzeichnis aus Gründen der Anweisung. Was mache ich falsch? Bild bezogen: http://s8.postimg.org/j6oovqlx1/picture.png –

+0

wo ist die schema.sql Datei gespeichert? Ist es auch im aktuellen Arbeitsverzeichnis? Ich habe auch meine Antwort aktualisiert, um die flashr.db-Datei zuerst als Sicherheitsmaßnahme zu erstellen. – codegeek

+0

Ja, es ist im selben Arbeitsordner. –

1

Wie yo u kann von den Fehlerprotokollen beobachten, der Fehler kommt, während DB Verbindungs ​​

sqlite3.OperationalError: unable to open database.

Und da dieser Schritt für Sie scheiterten,

sqlite3 /tmp/flaskr.db < schema.sql

Sie leicht, dass interpretieren kann dieser Schritt notwendig ist. nun diesen Fehler lösen, einfach müssen Sie sqlite3, in Ubuntu installieren können Sie installieren sqlite3 wie

apt-get install sqlite3

Nach der Installation Ihr Programm gut funktionieren wie erwartet.

+2

Dies ist auf * Windows *. Und SQLite * erstellt * die Datenbankdatei, wenn sie noch nicht existiert (wenn auch ohne das Schema), also stimmt etwas anderes nicht. –

+0

Dies war die Antwort in meinem Fall außer verwendet 'pip install sqlite3' auf' OS X'. – MikeiLL

1

Ich bin nicht sicher, ob diese Tipps sind direkt auf die PO anwendbar, aber sie haben mich hierher gebracht, also wird es vielleicht hilfreich sein.

unbedingt die README Datei innerhalb des flaskr Verzeichnis überprüfen, die flask --app=flaskr initdb von der Kommandozeile spezifiziert läuft.

Wenn dies AttributeError: 'Flask' object has no attribute 'cli' zurückgibt, kann es daran liegen, dass click nicht installiert ist.

Wenn der Befehl flask: command not found zurückgibt, kann es daran liegen, dass eine ältere Version von Flash installiert ist, was pip install flask tut.

Ab heute wird dieser Befehl pip install https://github.com/mitsuhiko/flask/tarball/master die neueste Version installieren.

4

Haben Sie virtualenv aktiviert und Kolben installiert?

flask sollte sqlite3 standardmäßig haben. Ich habe folgende Fehler aber:

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

Um dies zu beheben, dass ich hatte die folgende (in Windows) zu tun:

  1. ändern DATABASE = '/tmp/flaskr.db' zu DATABASE = '.\\tmp\\flaskr.db'
  2. erstellen tmp Ordner im aktuellen Ordner (flaskr)
  3. erstellen sie eine leere flaskr.db Datei in tmp

Danach Arbeit es für mich.

+1

Vielen Dank dafür, hatte genau das gleiche Problem und das hat perfekt funktioniert. – bkmoney

0

Für Linux-Benutzer nur:

Zuerst installieren Sie Sqlite3 von here.

Nach der Installation müssen Sie eine Datei flaskr.db, Position dieser Datei aufgerufen erstellen ist /myproject/Venv/bin/flaskr/tmp sein.

Nächster Schritt wird Befehl ausführen

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

ich von zu Hause Dateiadresse hat.

Der nächste Schritt ist Python-Shell starten, führen Sie diesen Code

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

Thats it.

Verwandte Themen