Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在烧瓶中:当使用wtforms、SQLAlchemy时,当表存在时,获取“OperationalError:(sqlite3.OperationalError)no-this table:”_Sqlite_Python 2.7_Flask_Sqlalchemy_Wtforms - Fatal编程技术网

在烧瓶中:当使用wtforms、SQLAlchemy时,当表存在时,获取“OperationalError:(sqlite3.OperationalError)no-this table:”

在烧瓶中:当使用wtforms、SQLAlchemy时,当表存在时,获取“OperationalError:(sqlite3.OperationalError)no-this table:”,sqlite,python-2.7,flask,sqlalchemy,wtforms,Sqlite,Python 2.7,Flask,Sqlalchemy,Wtforms,我有一个非常基本的flask应用程序正在开发中,我在将数据保存到sqlite数据库和表时遇到了一个问题,如果我使用直接执行方法(如下所示),该数据库和表肯定存在,并以表单提交的形式存在: 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 ter

我有一个非常基本的flask应用程序正在开发中,我在将数据保存到sqlite数据库和表时遇到了一个问题,如果我使用直接执行方法(如下所示),该数据库和表肯定存在,并以表单提交的形式存在:

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
db来自:

app = Flask(__name__)
app.config.from_envvar('FLASKAPP_SETTINGS', silent=True)
db = SQLAlchemy(app)
如前所述,数据库是存在的,如果我在代码中使用上面的sql命令,我可以从表单保存到数据库,但我觉得这不是最好的方法


我也不知道sql命令是否应该出错,可能是出了问题。否则,我无法理解为什么这不起作用,因为在许多文档中都显示这是一种方法。

对我来说,SQLAlchemy的数据库似乎配置不正确。db是在没有SQLAlchemy的情况下创建的。遵循这一点可以工作:

这一项可以工作吗:gdb.executeinsert到term值,form.term\u txt.data?是的,但我希望更多地使用SQLAlchemy的内置功能,而不必手动执行所有sql。是否运行db.create_all?@I这让我意识到我已经用另一种方式设置了数据库,并且应用程序和db之间的连接错误地使用SQLAlchemy插入或更新了数据库。
@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) 
app = Flask(__name__)
app.config.from_envvar('FLASKAPP_SETTINGS', silent=True)
db = SQLAlchemy(app)