更好的方法是将json转换为SQLAlchemy对象

时间:2016-10-06 08:39:41

标签: python json sqlalchemy

这些天我正在学习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"))

它可以工作,但随着我添加更多字段,它变得非常糟糕。

1 个答案:

答案 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()