mku*_*ayk 14 python json sqlalchemy jsonpickle flask
我正在使用Flask的SQLAlchemy扩展.在使用jsonpickle 序列化我的模型(也用于数据库操作)时,我想要忽略一些特定的属性.有没有办法让我设定这些规则?
SQLAlchemy添加了一个名为_sa_instance_state该对象的属性.总之,我不希望这个字段在JSON输出中.
Mar*_*ers 18
您不能告诉默认的类选择器忽略某些东西,不.
jsonpickle 确实支持pickle模块 __getstate__和__setstate__方法.如果您的类实现了这两个方法,则返回的任何内容将用于jsonpickle表示状态.这两种方法都需要实施.
如果__getstate__是未实现的,jsonpickle使用__dict__属性代替,所以你自己的版本只需要使用相同的字典,删除_sa_instance_state键,就可以完成:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
Run Code Online (Sandbox Code Playgroud)
无论何种__getstate__返回都将以递归方式进一步处理,因此无需担心在那里处理子对象.
如果添加__getstate__并且__setstate__不是选项,您还可以为您的类注册自定义序列化处理程序 ; 缺点是虽然__getstate__只是返回一个字典就可以逃脱,但是自定义处理程序需要返回一个完全展平的值.
| 归档时间: |
|
| 查看次数: |
6175 次 |
| 最近记录: |