当前位置: 首页 > 知识库问答 >
问题:

Python NeoModel如何将查询结果返回为JSON对象

马浩淼
2023-03-14

我对Python相当陌生,在我的应用程序中,我使用Neomodel从Neo4j数据库加载和检索图形数据。

在我的一条路线中,我具有以下功能:

@api_mod.route('/users')                                                            
def get_users():                                                                                                                                                        
     users = User.nodes #Returns a NodeSet                                                                                                                              
     list_of_users = list(users) #Converts the NodeSet object to a list                                                                                                                                                                                                                                                                    
     return json.dumps(dict(users = [user for user in list_of_users]))    

我的用户类定义如下:

class User(StructuredNode):
    user_id = StringProperty(unique_index=True, required=True)
    logged_in = RelationshipTo('Environment', 'LOGGED_IN', model=LoginAction)
    launched = RelationshipTo('Application', 'LAUNCHED', model=LaunchedAction)
    entered = RelationshipTo('Application', 'ENTERED', model=EnteredAction)
    accessed = RelationshipTo('Application', 'ACCESSED', model=AccessedAction)
    exited = RelationshipTo('Application', 'EXITED', model=ExitedAction)
    logged_out = RelationshipTo('Environment', 'LOGGED_OUT', model=LogoutAction)
    timed_out = RelationshipTo('Environment', 'TIME_OUT', model=TimeoutAction)

    def toJSON(self):
        return dict(user_id = self.user_id)

我期望我的 /users路由将返回一个包含数据库中所有用户的JSON对象。我明白NodeSet对象不能序列化为JSON对象,因此我试图将其转换为列表。但是现在,当我运行时,我得到以下错误:“TypeError:类型'User'的对象不是JSON可序列化的”

下面是整个堆栈跟踪:Traceback(最近一次调用last):File“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site packages/flask/app.py”,1997行,在call return self中。wsgi_应用程序(环境,启动响应)文件“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site packages/flask/app.py”,第1985行,在wsgi_应用程序响应=self中。handle_exception(e)File“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site packages/flask/app.py”,第1540行,在reraise提升值文件的handle_exception reraise(exc_type,exc_value,tb)File“/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site packages/flask/.py/_compat.py”第33行“/Users/mdebarros/。virtualenvs/useractivitylogs/lib/python3。6/站点包/烧瓶/应用程序。py“,第1982行,在wsgi_app response=self.full_dispatch_request()文件“/Users/mdebarros/”中。virtualenvs/useractivitylogs/lib/python3。6/站点包/烧瓶/应用程序。py”,第1614行,完整的调度请求rv=self.handle\u user\u exception(e)文件“/Users/mdebarros/。virtualenvs/useractivitylogs/lib/python3。6/站点包/烧瓶/应用程序。py”,第1517行,在句柄用户异常重新释放(exc类型,exc值,tb)文件“/Users/mdebarros/”中。virtualenvs/useractivitylogs/lib/python3。6/现场包装/烧瓶/容器。py“,第33行,在重新提升值文件“/Users/mdebarros/”中。virtualenvs/useractivitylogs/lib/python3。6/站点包/烧瓶/应用程序。py“,第1612行,完整的调度请求rv=self.dispatch\u request()文件“/Users/mdebarros/。virtualenvs/useractivitylogs/lib/python3。6/站点包/烧瓶/应用程序。py“,第1598行,在调度_请求返回self.view_functionsrule.endpoint文件“/Users/mdebarros/pycharm项目/useractivitylogs/app/api/routes中。py”,第16行,在get_users return json.dumps(dict(users=[user for user in list_of_users])文件“/usr/local/ceral/python3/3.6中。2/Frameworks/Python。framework/Versions/3.6/lib/python3。6/json/init。py”,第231行,在转储返回_default_encoder.encode(obj)文件“/usr/local/ceral/python3/3.6中。2/Frameworks/Python。framework/Versions/3.6/lib/python3。6/json/encoder。py”,第199行,在encode chunks=self.iterencode(o,_one_shot=True)文件“/usr/local/ceral/python3/3.6中。2/Frameworks/Python。framework/Versions/3.6/lib/python3。6/json/encoder。py”,第257行,在iterencode返回_iterencode(o,0)文件“/usr/local/ceral/python3/3.6中。2/Frameworks/Python。framework/Versions/3.6/lib/python3。6/json/encoder。py“,第180行,默认为o.class.name)TypeError:类型为“User”的对象不可JSON序列化

关于如何处理此问题并返回适当的JSON对象的任何帮助或建议?

提前感谢您的任何帮助。

--医学博士

共有1个答案

仰钧
2023-03-14

如您所知,用户类模型必须有一个方法来执行数据结构的转换(序列化)过程,要解决这个问题,一个解决方案是添加一个方法来执行此操作:

class User(StructuredNode):
    user_id = StringProperty(unique_index=True, required=True)
    logged_in = RelationshipTo('Environment', 'LOGGED_IN', model=LoginAction)
    launched = RelationshipTo('Application', 'LAUNCHED', model=LaunchedAction)
    entered = RelationshipTo('Application', 'ENTERED', model=EnteredAction)
    accessed = RelationshipTo('Application', 'ACCESSED', model=AccessedAction)
    exited = RelationshipTo('Application', 'EXITED', model=ExitedAction)
    logged_out = RelationshipTo('Environment', 'LOGGED_OUT', model=LogoutAction)
    timed_out = RelationshipTo('Environment', 'TIME_OUT', model=TimeoutAction)

@property
def serialize(self):
    return {
        'user_id': self.user_id,
        'logged_in': self.logged_in,
        'launched': self.launched,
        'entered': self.entered,
        'accessed': self.accessed,
        'exited': self.exited,
        'logged_out': self.logged_out,
        'timed_out'  : self.timed_out
   }

现在,由于该方法已添加为属性,因此可以将属性称为属性:

@api_mod.route('/users')                                                            
def get_users():                                                                                                                                                        
    users = User.nodes                                                                                                                            
    list_of_users = list(users)
    return json.dumps(dict(json_users = [user.serialize for user in list_of_users]))
 类似资料:
  • 我正在尝试计算配置单元中视图的平均/最小/最大记录计数 并试图实现如下内容: 但我收到一条错误消息: avg=5 min=4 max=6

  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 我希望PostgreSQL将查询结果作为一个JSON数组返回。给定 我想要类似于

  • 我在使用MongoDB查询时遇到问题。每当我尝试通过ID或任何其他字段查找时,我总是得到零结果返回。我也很难使用“like”操作符。 我想以不区分大小写的方式查询书名。而且我知道你可以在MongoDB中这样做: 我试着装腔作势地做,但我不能让它起作用: 我看到控制台上打印出以下行:{“title”:{“$regex”:“/^harr.*/I”}} 我也尝试过一个文档,但也不成功: 结果却是零。 这

  • 问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用

  • 问题内容: 我有以下从数据库获取十六进制代码的函数 我的问题是我在回调函数中返回了结果,但getColour函数未返回任何内容。我希望getColour函数返回的值。 在我调用getColour的那一刻,它不返回任何内容 我尝试做类似的事情 但当然SELECT查询在返回值时已经完成 问题答案: 您只需要对回调中的db查询结果进行处理。就像。