sqlalchemy查询的列表索引超出范围



在运行一个显然没有索引错误的查询/代码时,我遇到了一个索引错误。

@cognito_required
def put(self, stage: str):
data = Default.validator.parse_args()
table = user_client_association_table
db.session.query().
filter(table.c.client_id == data["client_id"]).
filter(table.c.user_id == data["user_id"]).
update({"is_default": 1})
db.session.commit()
return {
"data": {
"code": 200,
"message": f"The default user_id has been updated for the client {data['client_id']}",
}
}, 200

这是完整的回溯:

Traceback (most recent call last):
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/werkzeug/serving.py", line 323, in run_wsgi
execute(self.server.app)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/werkzeug/serving.py", line 312, in execute
application_iter = app(environ, start_response)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_restful/__init__.py", line 272, in error_router
return original_handler(e)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/_compat.py", line 38, in reraise
raise value.with_traceback(tb)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_restful/__init__.py", line 272, in error_router
return original_handler(e)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/_compat.py", line 38, in reraise
raise value.with_traceback(tb)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_restful/__init__.py", line 468, in wrapper
resp = resource(*args, **kwargs)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask/views.py", line 89, in view
return self.dispatch_request(*args, **kwargs)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/flask_restful/__init__.py", line 583, in dispatch_request
resp = meth(*args, **kwargs)
File "/home/ericson/Workspace/concil-v4-api/src/services/cognito_auth.py", line 12, in check_params
return _validate_token(func, *args, **kwargs)
File "/home/ericson/Workspace/concil-v4-api/src/services/cognito_auth.py", line 31, in _validate_token
return func(*args, **kwargs)
File "/home/ericson/Workspace/concil-v4-api/src/resources/default/__init__.py", line 49, in put
db.session.query().
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 4033, in update
update_op = persistence.BulkUpdate.factory(
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1818, in factory
return BulkUD._factory(
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1691, in _factory
return klass(*arg)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1812, in __init__
super(BulkUpdate, self).__init__(query)
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1651, in __init__
self.mapper = self.query._bind_mapper()
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 425, in _bind_mapper
ezero = self._entity_zero()
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 412, in _entity_zero
else self._query_entity_zero().entity_zero
File "/home/ericson/Workspace/concil-v4-api/venv/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 398, in _query_entity_zero
return self._entities[0]
IndexError: list index out of range

你知道是什么原因造成的吗?

问题是我正在处理一个表对象。user_client_association_table是一个Table对象,我需要指定一个要更新的模型。所以我定义了一个模型:

从数据库导入数据库

import model
class UserClient(db.Model):
__bind_key__ = "DEV_BASIS"
__tablename__ = "tb_user_client"
__table_args__ = {'extend_existing': True}
ctid = db.Column(db.Integer, primary_key=True)

然后我导入了它:

from model import UserClient
...
@cognito_required
def put(self, stage: str):
data = Default.validator.parse_args()
table = user_client_association_table
db.session.query(UserClient).
filter(table.c.client_id == data["client_id"]).
filter(table.c.user_id == data["user_id"]).
update({"is_default": 0})
db.session.commit()
return {
"data": {
"code": 200,
"message": f"The default user_id has been updated for the client {data['client_id']}",
}
}, 200

这里真的有一个模糊的问题,谢谢@sakecharmerb

最新更新