最近在学习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"))
它可以工作,但是当我添加更多字段时,它变得很糟糕。
最佳答案
如果您的 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__)
,所以id
在 bool 廷斯
UPD
如果您的 json 字段不属于该模型,您可以使用字典理解过滤掉它们
user = User(**{k:v for k, v in obj.items() if k in {'id', 'name'}})
UPD 的 UPD
这取决于您 obj
的大小,在大多数情况下,迭代 ('id', 'name')
而不是 obj.items()
:
user = User(**{k: obj[k] for k in ('id', 'name') if k in obj})
关于python - 将 json 转换为 SQLAlchemy 对象的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891387/