CamelCase Conversion

Source module: fastapi_utils.camelcase


The fastapi_utils.camelcase module contains functions for converting camelCase or CamelCase strings to snake_case, and vice versa:

from fastapi_utils.camelcase import camel2snake, snake2camel

assert snake2camel("some_field_name", start_lower=False) == "SomeFieldName"
assert snake2camel("some_field_name", start_lower=True) == "someFieldName"
assert camel2snake("someFieldName") == "some_field_name"
assert camel2snake("SomeFieldName") == "some_field_name"

These functions are used by APIModel to ensure snake_case can be used in your python code, and camelCase attributes in external JSON.

But they can also come in handy in other places – for example, you could use them to ensure tables declared using SQLAlchemy’s declarative API are named using snake_case:

from sqlalchemy.ext.declarative import declarative_base, declared_attr

from fastapi_utils.camelcase import camel2snake


class CustomBase:
    @declared_attr
    def __tablename__(cls) -> str:
        return camel2snake(cls.__name__)


Base = declarative_base(cls=CustomBase)

If you were to create a class MyUser(Base): using Base defined above, the resulting database table would be named my_user.