4

我正在尝试使用 SQLAlchemy 使用 Flask 设置 SQL 数据库。我在这个 github 页面上的示例之后对我的代码进行建模,但我似乎无法让它工作。

我不断收到以下错误:

sqlalchemy.exc.OperationalError: (OperationalError) no such table: user u'INSERT INTO user (username, email) VALUES (?, ?)' ('test', 'test@gmail.com')

这是我的代码:

from flask import Flask, render_template, request, url_for, request, redirect
from flask.ext.sqlalchemy import SQLAlchemy
import sqlite3
import os

app = Flask(__name__)
sqlite3.connect(os.path.abspath("test.db"))
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email
    def __repr__(self):
        return "<User %r>" % self.username

x = User("test", "test@gmail.com")
db.session.add(x)
db.session.commit()
@app.route("/")
def index():
    return User.query.all()     

if __name__ == "__main__":
    init.db()
    app.run(debug=True)

我知道该错误与每个会话有关,但我有点困惑,因为给出的示例从未明确初始化会话。

4

1 回答 1

5

Python 解析您的文件并执行每一行(我猜它更复杂,但无论如何)。所以它到达以下行(在之前 if __name__ == "__main__": ...执行:

db.session.commit()

它尝试将用户添加x到数据库。但是数据库/表还不存在,因为您稍后尝试通过调用创建它几行init.db(),顺便说一句这是错误的。是什么init?您的代码中没有定义它。

仔细阅读

这是您的代码应如下所示:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return "<User %r>" % self.username

@app.route("/")
def index():
    return User.query.all() # I don't think this will work

if __name__ == "__main__":
    db.create_all()

    x = User("test", "test@gmail.com")
    db.session.add(x)
    db.session.commit()

    app.run(debug=True)

请注意,db.create_all()如果数据库已经存在,则会失败并崩溃。看看Flask-Script。它可以帮助您为您的应用程序构建设置脚本。

于 2013-07-14T15:14:24.800 回答