首页 文章

Python SQLalchemy TypeError:'list'对象不可调用[重复]

提问于
浏览
0

这个问题在这里已有答案:

*这个问题不是另一个问题的重复,我已经尝试过那个问题给出的答案,但这并没有解决我的问题 . 谢谢 .

我是Python的初学者,学习如何使用SQLalchemy .

  • 我正在尝试从数据库表中检索所有行

  • 将结果作为对象列表返回

  • 我的js代码将读取对象列表并显示到视图中

但是我一直得到这个列表对象是不可调用的错误 . 有人可以给我一个指导,谢谢你 .

@mod_core.route('/getDatatable', methods=['GET'])
def datatable_get():
    # Query 'user' table.
    _user = User.query.all()
    _results = []
    for user in _user:
        print user.get_all()
        _results.append(user.get_all())
    return _results

127.0.0.1 - - [22 / Jan / 2017 17:10:46]“GET / getDatatable HTTP / 1.1”500 - 回溯(最近一次调用最后一次):文件“/usr/local/lib/python2.7/dist -packages / flask / app.py“,第2000行,在调用返回self.wsgi_app(environ,start_response)文件”/usr/local/lib/python2.7/dist-packages/flask/app.py“,第1991行,在wsgi_app response = self.make_response(self.handle_exception(e))文件“/usr/local/lib/python2.7/dist-packages/flask_restful/init.py”,第271行,在error_router中返回original_handler(e)文件“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第1567行,在handle_exception中重新加载(exc_type,exc_value,tb)文件“/usr/local/lib/python2.7/ dist-packages / flask / app.py“,第1988行,在wsgi_app response = self.full_dispatch_request()文件”/usr/local/lib/python2.7/dist-packages/flask/app.py“,第1642行, in full_dispatch_request response = self.make_response(rv)file“/usr/local/lib/python2.7/dist-packages/flask/app.py”,第1746行,在make_response中rv = self.response_class.force_type(rv, request.environ)文件“/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py”,第847行,在force_type response = BaseResponse(* _ run_wsgi_app(response,environ))文件“/ usr / local / lib / python2.7 / dist-packages / werkzeug / wrappers.py“,第57行,在_run_wsgi_app中返回_run_wsgi_app(* args)文件”/usr/local/lib/python2.7/dist-packages/werkzeug/test .py“,第871行,在run_wsgi_app中app_rv = app(environ,start_response)TypeError:'list'对象不可调用

UPDATE 1 : I have also tried changing User to Json before returning and still gets the same error:

@mod_core.route('/getDatatable', methods=['GET'])
def datatable_get():
    # Query 'user' table.
    _user = User.query.all()
    results = []
    for user in _user:
        results.append(user.to_json())
        print results
    return results

User class

def to_json(self):
      """
      Return a JSON response for RESTful API GET request.
      """
      _user_in_josn = {'login_id': self.login_id,
                       'fullname': self.fullname,
                       'nickname': self.nickname,
                       'matric': self.matric_no,
                       'email': self.email,
                       'alt_email': self.alt_email
            }
      return _user_in_josn

UPDATE 2 : Tried to cast to JSON before returning results

0x7f88f80b14d0>处的用户对象不是JSON可序列化的

请指导我 . 感谢您的关注和帮助 .

1 回答

  • 1

    我'm not sure exactly where your problem is coming from, but I do see a confusing thing you'正在处理您的 user 对象 . 你已经在你的循环中获得了 user ,但你仍然在调用 user.get_all() . 我不确定应该做什么,因为在那一点上, user 只是一个用户对象 . 你想要 user 的数据库ID吗?其他一些数据如用户名?

    尝试将该行更改为以下内容:

    _results.append(user.id)
    

    这会将 user 的ID添加到您的列表中 . 或者,您可以附加存储在 user 对象中的任何其他数据 . 如果您想要 return 数据库中所有用户的完整列表,请执行以下操作:

    return _user
    

    我可能还建议重命名这些变量 _user_results . 使用前导下划线通常只用于隐藏变量,这里似乎没有任何需要 . 此外,由于 _user 存储了许多 user 对象,因此像 users 这样的名称可能更适合指示变量包含的内容 .

相关问题