在Flask中:当使用wtforms,SQLAlchemy时,当表存在时,得到“OperationalError:(sqlite3.OperationalError)no such table:”

时间:2015-09-16 03:34:19

标签: sqlite python-2.7 flask sqlalchemy wtforms

我在工作中有一个非常基本的烧瓶应用程序,我遇到了将数据保存到sqlite数据库和表格中的问题,如果我使用直接var root = <Text/>; React.render(root, document.getElementById('content')); 方法,那么它肯定存在并且确实需要提交表单像这样:

execute()

模型为:

def get_db():
    if not hasattr(g, 'sqlite_db'):
        g.sqlite_db = connect_db()
    return g.sqlite_db
...

gdb = get_db()
gdb.execute("insert into term (term_txt) values (?)", (form.term_txt.data,))
gdb.commit()

表格是:

class Term(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    term_txt = db.Column(db.String(255), unique=True)

    def __init__(self, term_txt):
        self.term_txt = term_txt

    def __repr__(self):
        return '<Term %r>' % self.term_txt

但是,如果我尝试使用Flask建议的方式在此路线中执行此操作,我会收到以下错误{% extends "layout.html" %} {% block body %} <form action="{{ url_for('addTerm') }}" method="POST"> {{ form.term_txt }} {{ form.csrf_token }} <p><input type="submit" label="Add Term"></p> </form> {% endblock %}

OperationalError: (sqlite3.OperationalError) no such table: term [SQL: u'INSERT INTO term (term_txt) VALUES (?)'] [parameters: (u'my test term',)]

@app.route('/add_term', methods=('GET', 'POST')) def addTerm(): form = AddTermForm(csrf_enabled=True) if request.method == "POST": newTerm = Term(term_txt=form.term_txt.data) db.session.add(newTerm) db.session.commit() #gdb = get_db() #gdb.execute("insert into term (term_txt) values (?)", (form.term_txt.data,)) #gdb.commit() return redirect(url_for('terms')) else: return render_template('new_term.html', form=form) 来自:

db

如上所述,数据库存在,如果我在代码中使用上面的sql命令,我可以从表单保存到数据库,但我觉得这不是最好的方法。

另外我不知道sql命令是否应该在错误中,也许有些错误。否则,我无法弄清楚为什么这不起作用,因为在许多文档中看来这是这样做的。

1 个答案:

答案 0 :(得分:0)

对我来说,看起来SQLAlchemy的数据库配置不正确。数据库是在没有SQLAlchemy的情况下创建的。在此之后,它发挥了作用:How do you set up a Flask application with SQLAlchemy for testing?