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

2024-05-06 07:52:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

@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

你知道这是什么原因吗


Tags: inpyapiflaskhomevenvlibpackages
1条回答
网友
1楼 · 发布于 2024-05-06 07:52:18

问题是我正在处理一个表对象user_client_association_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

这里的问题真的很模糊,谢谢@snakecharmerb

相关问题 更多 >