深入理解Flask 第三章代码运行报错, 代码完全正常,为什么报SQL语法错误?

发布于 2022-09-05 00:54:46 字数 11395 浏览 14 评论 0

原句
posts = Post.query.order_by(Post.publish_date.desc()).paginate(page, 10)
路由这里已经定义 page=1了, 作者不可能写错代码啊, 我设置了utf-8编码也不行
@app.route('/')
@app.route('/<int:page>')
def home(page=1):
    posts = Post.query.order_by(Post.publish_date.desc()).paginate(page, 10)
    recent, top_tags = sidebar_data()

    return render_template(
        'home.html',
        posts=posts,
        recent=recent,
        top_tags=top_tags
    )
/Library/Python/2.7/site-packages/sqlalchemy/sql/compiler.py:624: SAWarning: Can't resolve label reference 'total DESC'; converting to text() (this warning may be suppressed after 10 occurrences)
  util.ellipses_string(element.element))
127.0.0.1 - - [07/Jun/2017 14:44:06] "GET / HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1994, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/main.py", line 114, in home
    top_tags=top_tags
  File "/Library/Python/2.7/site-packages/flask/templating.py", line 134, in render_template
    context, ctx.app)
  File "/Library/Python/2.7/site-packages/flask/templating.py", line 116, in _render
    rv = template.render(context)
  File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/home.html", line 1, in top-level template code
    {% extends "base.html" %}
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/base.html", line 45, in top-level template code
    {% block body %}
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/home.html", line 38, in block "body"
    {{ render_pagination(posts, 'home') }}
  File "/Library/Python/2.7/site-packages/jinja2/runtime.py", line 551, in _invoke
    rv = self._func(*arguments)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/base.html", line 5, in template
    <a href="{{ url_for('home', page=pagination.prev().page) }}" aria-label="Previous">
  File "/Library/Python/2.7/site-packages/flask_sqlalchemy/__init__.py", line 338, in prev
    return self.query.paginate(self.page - 1, self.per_page, error_out)
  File "/Library/Python/2.7/site-packages/flask_sqlalchemy/__init__.py", line 475, in paginate
    items = self.limit(per_page).offset((page - 1) * per_page).all()
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2703, in all
    return list(self)
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2855, in __iter__
    return self._execute_and_instances(context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2878, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
    context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
    exc_info
  File "/Library/Python/2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
    cursor.execute(statement, parameters)
  File "/Library/Python/2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/Library/Python/2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
ProgrammingError: (_mysql_exceptions.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 3") [SQL: u'SELECT post.id AS post_id, post.title AS post_title, post.text AS post_text, post.publish_date AS post_publish_date, post.user_id AS post_user_id \nFROM post ORDER BY post.publish_date DESC \n LIMIT %s, %s'] [parameters: (-10, 10)]
127.0.0.1 - - [07/Jun/2017 14:44:06] "GET /?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -
127.0.0.1 - - [07/Jun/2017 14:44:06] "GET /?__debugger__=yes&cmd=resource&f=jquery.js HTTP/1.1" 200 -
127.0.0.1 - - [07/Jun/2017 14:44:06] "GET /?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 200 -
(<type 'int'>, 1)
127.0.0.1 - - [07/Jun/2017 14:44:06] "GET / HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1994, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/main.py", line 114, in home
    top_tags=top_tags
  File "/Library/Python/2.7/site-packages/flask/templating.py", line 134, in render_template
    context, ctx.app)
  File "/Library/Python/2.7/site-packages/flask/templating.py", line 116, in _render
    rv = template.render(context)
  File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/home.html", line 1, in top-level template code
    {% extends "base.html" %}
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/base.html", line 45, in top-level template code
    {% block body %}
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/home.html", line 38, in block "body"
    {{ render_pagination(posts, 'home') }}
  File "/Library/Python/2.7/site-packages/jinja2/runtime.py", line 551, in _invoke
    rv = self._func(*arguments)
  File "/Users/andy/Desktop/Mastering Flask_Code Bundle/Chapter 3/chapter_3/templates/base.html", line 5, in template
    <a href="{{ url_for('home', page=pagination.prev().page) }}" aria-label="Previous">
  File "/Library/Python/2.7/site-packages/flask_sqlalchemy/__init__.py", line 338, in prev
    return self.query.paginate(self.page - 1, self.per_page, error_out)
  File "/Library/Python/2.7/site-packages/flask_sqlalchemy/__init__.py", line 475, in paginate
    items = self.limit(per_page).offset((page - 1) * per_page).all()
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2703, in all
    return list(self)
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2855, in __iter__
    return self._execute_and_instances(context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/orm/query.py", line 2878, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 945, in execute
    return meth(self, multiparams, params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
    context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
    exc_info
  File "/Library/Python/2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    context)
  File "/Library/Python/2.7/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
    cursor.execute(statement, parameters)
  File "/Library/Python/2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/Library/Python/2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
ProgrammingError: (_mysql_exceptions.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 3") [SQL: u'SELECT post.id AS post_id, post.title AS post_title, post.text AS post_text, post.publish_date AS post_publish_date, post.user_id AS post_user_id \nFROM post ORDER BY post.publish_date DESC \n LIMIT %s, %s'] [parameters: (-10, 10)]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

唔猫 2022-09-12 00:54:46

数据库,表没建好

忘东忘西忘不掉你 2022-09-12 00:54:46

看到你的sql语句

select * from 表 limit -10, 10

正确的应该是

select * from 表 limit 0, 10

你page传入的是0吧?至少是1起始啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文