2015-02-09 7 views
1

Итак, я новичок в Python, и сейчас я экспериментирую с Flask. Я прочитал многочисленные документы и блоги о том, как просто настроить подключение к простой базе данных с помощью фляжки, но без каких-либо успехов. Можете ли вы, ребята, помочь мне?Колба: Подключиться к sqlite

Я не хочу ничего особенного сейчас, просто чтобы получить соединение. Ниже приведен код прямо сейчас с простым тестовым запросом, который я хочу получить.

Результатом является обычная внутренняя ошибка сервера 500.

app = Flask(__name__) 

from flask import Flask 
import sqlite3 
from flask import g 

@app.before_request 
def before_request(): 
    g.db = sqlite3.connect("database.db") 


@app.teardown_request 
def teardown_request(exception): 
    if hasattr(g, 'db'): 
     g.db.close() 


@app.route('/') 
def hello_world(): 
    g.db.execute("INSERT INTO test VALUES 'TestValue'") 
    g.db.commit() 


if __name__ == '__main__': 
    app.run() 
+2

Ошибка 500 приведет к отслеживанию на консоли, можете ли вы поделиться этим? Ваша база данных.база данных db' на самом деле * есть * таблица 'test' в ней? Вы также используете относительный путь, поэтому 'database.db' будет открыт в текущем рабочем каталоге. Возможно, это не так, как вы ожидаете. –

+1

Фактически вы не возвращаете данные из своей функции просмотра - что произойдет, если вы - 1. добавьте 'return 'Hello World'' после своих' g.db.commit() 'и 2. измените' app.run() ' на 'app.run (debug = True)'? –

ответ

3

Есть несколько вещей, которые могут быть причиной проблемы здесь:

Во-первых, ваше приложение должно импортировать класс КОЛБУ, прежде чем он может построить приложение. Итак:

app = Flask(__name__):

Если следовать операторы импорта.

Я предполагаю, что, поскольку у вас есть ошибка сервера 500, это не вызывает проблемы.

Во-вторых, в вашей вставке есть небольшая синтаксическая ошибка. Должно быть:

g.db.execute("INSERT INTO test VALUES ('TestValue')")

Пожалуйста, прочтите SQLite documentation на правильный синтаксис для использования вставок. Или см. this tutorial (что на самом деле немного более освежает).

И, наконец, я подозреваю, что у вас еще нет базы данных, поэтому есть ошибка ввода. Например, как Flask может вставлять данные в таблицу, если база данных не существует?

Вы должны признать, что колба является достаточно умна, чтобы создать базу данных SQLite, которые вы найдете в рабочем каталоге с именем database.db Какой именно то, что вы сделали здесь:

g.db = sqlite3.connect("database.db")

Но это не будет заполнять эту базу данных правильной схемой, позволяющей фактически вставлять данные через приложение Flask. Вам нужно инициализировать базу данных, написав схему в базе данных. Например, создать схему:

CREATE TABLE test (
    field1 STRING 
); 

Затем в командной строке вопроса:

sqlite3 database.db < schema.sql

Это создаст базу данных с одной таблицей называется тест, который принимает одно поле типа строка. Теперь, когда база данных инициализирована, вы можете записать ее через приложение Flask. Большие проекты обычно имеют сценарий инициализации базы данных.

Смежные вопросы