我正在尝试使用SQLAlchemy与Flask建立SQL数据库。我在this github page上的示例之后对我的代码进行建模,但我似乎无法使其工作。
我一直收到以下错误:
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)
我知道错误涉及与每个会话有关,但我有点困惑,因为给出的示例从未明确初始化会话。
答案 0 :(得分:5)
Python会解析你的文件并执行每一行(我想它会更复杂但是无论如何)。所以它到达以下行(在 if __name__ == "__main__": ...
之前执行:
db.session.commit()
尝试将用户x
添加到数据库。但是数据库/表还不存在,因为你试图通过调用init.db()
来创建几行,这是错误的。什么是init
?它在代码中没有定义。
请再次仔细阅读this
以下是您的代码应该是什么样的:
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。它可以帮助您为应用程序构建设置脚本。