【问题标题】:FastAPI jsonencoder always returns camelCase instead of snake_caseFastAPI jsonencoder 总是返回 camelCase 而不是 snake_case
【发布时间】:2021-04-05 02:20:10
【问题描述】:

我在snake_case 中有一个数据对象和一个使用snake_case 的数据库模式。我只是想在数据库中创建一个新行。为此,我必须先序列化数据对象。不幸的是,当我使用默认的 fastAPI 序列化程序时,我总是得到一个 camelCase 对象。当然,我可以使用另一个库将序列化的camelCase数据再次转换为snake_case,但必须有更简单的方法。


class CRUDPost(CRUDBase[Post, PostCreate, PostUpdate]):
    def create(self, db: Session, obj_in: PostCreate, created_by: UUID4) -> Post:
        logger.info(obj_in) // => obj in snake_case
        obj_in_data = jsonable_encoder(obj_in, by_alias=True)
        logger.info(obj_in_data) => obj in camelCase
        db_obj = self.model(**obj_in_data, created_by=created_by)
        db.add(db_obj)
        db.commit()
        db.refresh(db_obj)
        return db_obj

编辑:

Camelcase 中的对象:{'leetcodeSubmissions': 0, 'interviewTimeline': 0} snake_case 中的对象:{'leetcode_submissions': 0, 'interview_timeline': 0}

【问题讨论】:

    标签: python fastapi


    【解决方案1】:

    如果我的猜测是正确的,那么这是jsonable_encoder 的预期行为。

    基于这一行: obj_in_data = jsonable_encoder(obj_in, by_alias=True)

    我认为您的 PostCreate 为其字段设置了别名,即 camelCase 并且您正在 Pydantic 模型上调用 jsonable_encoder ,这会将类的实例转换为 Python 字典。尝试将by_alias 设置为False,它应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多