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

标签 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"))

它可以工作,但是当我添加更多字段时,它变得很糟糕。

最佳答案

如果您的 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/

相关文章:

python - 无法在 python 2.7 中导入 boto3

python - Unicode 构造函数将接受一个 unicode 对象,但前提是没有传递 kwargs

python - 在管道中的分类器之后使用度量

python - 子图中的 Matplotlib 图例

python - SQLAlchemy 占位符不能正常工作

java - ClassNotFoundException : org. json.JSONException 异常

javascript - 尝试用 JSON 编写函数,在函数调用中获取 "Unexpected token"

javascript - 由于范围问题,变量返回为未定义

python - SQLAlchemy , 属性错误 : 'tuple' object has no attribute 'foreign_keys'

python - 如何知道哪个表单提交到flask web服务器