Python SQLalchemy TypeError:' list'对象不可调用

时间:2017-01-22 08:45:07

标签: python sqlalchemy flask-sqlalchemy

  

*这个问题不是另一个问题的重复,我已经尝试过该问题给出的答案而且没有解决   我的问题。感谢。

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

  1. 我正在尝试从数据库表中检索所有行
  2. 将结果作为对象列表返回
  3. 我的js代码将读取对象列表并显示到视图中
  4. 但是我一直得到这个列表对象是不可调用的错误。有人可以给我一个指南,谢谢你。

    @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行,致电       return 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中       return 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行,在full_dispatch_request中       response = self.make_response(rv)

         

    文件" /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行,强制类型       response = BaseResponse(* _ run_wsgi_app(response,environ))

         

    文件" /usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py",第57行,在_run_wsgi_app中       return _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'对象不可调用

    更新1:我还尝试在返回之前将User更改为Json并仍然出现相同的错误:

    @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
    

    用户类

       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  
    

    更新2:尝试在返回结果之前转换为JSON

      

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

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

1 个答案:

答案 0 :(得分:1)

我不确定问题的确切位置,但我确实看到了您对user个对象所做的令人困惑的事情。您已在循环中获得user,但您仍然在调用user.get_all()。我不确定应该做什么,因为在这一点上,user只是一个用户对象。您想要user的数据库ID吗?其他一些数据如用户名?

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

_results.append(user.id)

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

return _user

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