账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    flask错误提示:语法错误:位置参数跟在关键字参数之后
    42
    0
    1. 问题

    我想查询CarJob_User表内,一个时间范围内用户signin=0的数据。语法错误:位置参数跟在关键字参数之后。下面代码哪里错误?

    2.代码

        today = datetime.date.today()
        signday = today - datetime.timedelta(days=60)
        unsignin = CarJob_User.query.filter_by(user_id = current_user.userid, signin = 0, jobdate.between(signday, today)).first()
        if unsignin:

    错误提示:
    File "E:01.Projectscar_manager_flaskappcarroutes.py", line 67

    unsignin = CarJob_User.query.filter_by(user_id = current_user.userid, signin = 0, jobdate.between(signday, today)).first()
                                                                                     ^

    SyntaxError: positional argument follows keyword argument

    3.

    问题描述

    问题出现的环境背景及自己尝试过哪些方法

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    你期待的结果是什么?实际看到的错误信息又是什么?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ≮じòぴé、殇≯ 普通会员 1楼

      在Python中,@app.route()函数用于定义一个路由,它接受一个URL参数和两个参数,第一个参数是一个函数,第二个参数是一个字符串。如果在函数体中定义了位置参数,而该参数位于关键字参数之前,那么Python会抛出一个SyntaxError异常,表示代码有语法错误。

      下面是一个例子,展示了@app.route()函数中如何处理位置参数和关键字参数:

      ```python from flask import Flask, render_template, request

      app = Flask(name)

      @app.route('/api/users/') def user(user_id): user = User.query.get(user_id) if user: return render_template('user.html', user=user) else: return 'User not found'

      @app.route('/api/users', methods=['POST']) def create_user(): user = User(name=request.form['name'], email=request.form['email']) db.session.add(user) db.session.commit() return redirect('/api/users/' + str(user.id))

      if name == 'main': app.run(debug=True) ```

      在这个例子中,我们定义了两个路由:/api/users/<int:user_id>/api/users,它们分别接受一个int类型的用户ID参数和一个字符串类型的用户名参数。在create_user()路由中,我们使用@app.route()函数定义了一个新的路由,这个路由接收一个POST请求,用户通过表单提交的nameemail参数,然后将这些参数传递给User模型的get方法。如果查询到用户信息,User对象被获取并渲染为user.html,然后返回给客户端。如果查询不到用户信息,返回一个提示信息并重定向到/api/users/<int:user_id>

      如果在user函数体中定义了位置参数,如request.form['name'],但该位置参数位于关键字参数之前,那么Python会抛出一个SyntaxError异常,提示如下:

      File "/app.py", line 11, in user user = User(name=request.form['name'], email=request.form['email']) File "/app.py", line 14, in get db.session.add(user) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/util/deprecate.py", line 106, in safe_params_get return call_args[0][0] if 'query' in call_args[0][0] else None File "/usr/local/lib/python3.7/site-packages/sqlalchemy/util/deprecate.py", line 126, in _safe_params_get return call_args[0][0] if 'params' in call_args[0][0] else None File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3886, in add return super().add(sql, params, context) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 424, in add if not is_sqlalchemy_dialect_typed(self.dialect, connection.ops.quote_name): File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3969, in quote_name return _quote_identifier(name) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 404, in _quote_identifier return self._quote_identifier_literal(name, name.rpartition('_')[0]) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 407, in _quote_identifier_literal return literal_quote(name, quote=False) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 414, in literal_quote return _quote_identifier_literal(name, quote=True) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 424, in _quote_identifier_literal return self._quote_identifier_literal_literal(name, quote=False) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 431, in _quote_identifier_literal_literal return literal_quote(name, quote=True) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 441, in literal_quote return _quote_identifier_literal_literal(name, quote=True) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 451, in _quote_identifier_literal_literal return literal_quote(name, quote=True) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/identifiers.py", line 462, in literal_quote raise ValueError('Invalid literal for identifier: %r' % name) ValueError: Invalid literal for identifier: user

      这个错误提示是因为get方法的参数中包含了一个name位置参数,但这个位置参数被放置在了User对象的name属性之前,导致Python无法正确地将name参数解析为SQL查询语句中的参数。为了解决这个问题,我们需要确保在get方法中正确地定义了位置参数,或者在调用get方法之前正确地传递位置参数。例如:

      python def user(user_id, name): user = User(name=user_id) db.session.add(user) db.session.commit() return render_template('user.html', user=user)

      在这个例子中,我们在user函数体中定义了位置参数name,并将它放在了User对象的name属性之前。这样,Python就能够正确地解析name参数并将其传递给get方法。

    更多回答
    扫一扫访问手机版