我想查询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.
// 请把代码文本粘贴到下方(请勿用图片代替代码)
在Python中,@app.route()
函数用于定义一个路由,它接受一个URL参数和两个参数,第一个参数是一个函数,第二个参数是一个字符串。如果在函数体中定义了位置参数,而该参数位于关键字参数之前,那么Python会抛出一个SyntaxError
异常,表示代码有语法错误。
下面是一个例子,展示了@app.route()
函数中如何处理位置参数和关键字参数:
```python from flask import Flask, render_template, request
app = Flask(name)
@app.route('/api/users/
@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
请求,用户通过表单提交的name
和email
参数,然后将这些参数传递给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
方法。