Liq*_*Lau 4 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"))
Run Code Online (Sandbox Code Playgroud)
它可以工作,但随着我添加更多字段,它变得非常糟糕.
vis*_*ell 16
如果您的json文件中只有可以初始化Userfrom的字段.然后你就可以做到.
user = User(**obj)
Run Code Online (Sandbox Code Playgroud)
**obj将解压你的dict对象,所以如果有obj = {'id': 1, 'name': 'Awesome'},User(**obj)将会这样做User(id=1, name='Awesome')
你可以看到文档
注意:最好是避免使用id作为变量|领域,因为'id' in dir(__builtin__),这样id的bultins
UPD
如果您的json字段中不属于该模型,则可以使用dict理解过滤掉它们
user = User(**{k:v for k, v in obj.items() if k in {'id', 'name'}})
Run Code Online (Sandbox Code Playgroud)
UPD for UPD
这取决于你的大小obj,在大多数情况下,迭代可能更好(性能和清晰度)('id', 'name')而不是obj.items():
user = User(**{k: obj[k] for k in ('id', 'name') if k in obj})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4574 次 |
| 最近记录: |