首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在调用MySQLdb之前执行,仍会引发" execute () first“错误

即使在调用MySQLdb之前执行,仍会引发" execute () first“错误
EN

Stack Overflow用户
提问于 2015-12-17 14:50:34
回答 1查看 8.5K关注 0票数 7

在使用MySQLdb时,我得到了以下错误。_mysql_exceptions.ProgrammingError: execute() first

print输出告诉我“获取后”从未被打印,这意味着脚本在row = g.db.cursor().fetchall()上崩溃了。为什么我要得到这个错误,以及如何修复它?

代码语言:javascript
复制
def connect_db():
    return mysql.connection

@app.before_request
def before_request():
    g.db = connect_db()

@app.teardown_request
def teardown_request(exception):
    g.db.cursor().close()

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        g.db.cursor().execute('SELECT * FROM users WHERE email = %s', [request.form['email']])
        print('Before fetch')
        row = g.db.cursor().fetchall()
        print('After fetch')

        if not row:
            flash('No such user exists!')
            return redirect(url_for('show_home'))
        elif request.form['password'] == row[0][1]:
            return redirect(url_for('show_dashboard'))
        else:
            flash('Wrong password / login error.')
            return redirect(url_for('show_home'))
代码语言:javascript
复制
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/media/common/code/python/projects/up2date/up2date.py", line 47, in login
row = g.db.cursor().fetchall()
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 406, in fetchall
self._check_executed()
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/MySQLdb/cursors.py", line 107, in _check_executed
self.errorhandler(self, ProgrammingError, "execute() first")
File "/media/common/code/python/projects/up2date/venv/lib/python3.4/site-packages/MySQLdb/connections.py", line 38, in defaulterrorhandler
Open an interactive python shell in this frameraise errorclass(errorvalue)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-17 15:38:39

您要多次调用cursor,这将创建多个游标。在第一个游标上执行查询,然后从第二个游标中获取查询。因为您没有在第二次执行任何操作,所以会得到这个错误。只使用一个光标。

代码语言:javascript
复制
cursor = g.db.cursor()
cursor.execute(...)
rows = cursor.fetchall()
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34337452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档