这些天我正在学习SQLAlchemy。当我想从json加载一个对象并将其保存到MySQL时,事情变得困难,因为我的模型中的字段超过20,我想知道是否有更好的方法来做到这一点。
我的原始代码如下:
class User(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
name = Column(String)
json_str = """{"id": 1, "name": "yetship"}"""
obj = json.loads(json_str)
user = User(id=obj.get("id"), name=obj.get("name"))
它可以工作,但随着我添加更多字段,它变得非常糟糕。
答案 0 :(得分:9)
如果您的json文件中只有可以初始化User
的字段。然后你就可以做到。
user = User(**obj)
**obj
会解压您的dict
个对象,因此,如果obj = {'id': 1, 'name': 'Awesome'}
,User(**obj)
会像User(id=1, name='Awesome')
那样
您可以看到the docs
注意:最好避免将id
用作变量字段,因为'id' in dir(__builtin__)
,所以bultins中的id
<强> UPD 强>
如果您的json字段中不属于该模型,则可以使用dict理解过滤掉它们
user = User(**{k:v for k, v in obj.items() if k in {'id', 'name'}})
UPD for UPD
这取决于您obj
的大小,在大多数情况下,迭代('id', 'name')
而非{{1}可能更好(性能和清晰度) }:
obj.items()