Search code examples
pythonpython-3.xpydanticsqlmodel

How can I use alias in Sqlmodel library?


I am learning to use new Sqlmodel library in Python. As far as i understand, it is based on two libraries: Sqlalchemy and Pydantic.

Question:

Is there any option in Sqlmodel to use alias parameter in Field? In my custom class i have some attributes, which have exactly same names as attributes of parent classes (for example "schema" attribute of SQLModel base class)

I've tried to use alias as in Pydantic, but failed.

Succesful usage with Pydantic library:

from pydantic import BaseModel, Field
from typing import List, Optional

class Editable(BaseModel):
    only_fact: Optional[bool] = Field(default=None)
    dispose: Optional[int] = Field(default=None)
    optional: Optional[bool] = Field(default=None)

class SchemaDetail(BaseModel):
    id: int
    title: str
    parent_id: Optional[int] = Field(default=None)
    values: List[float]

class MyClass(BaseModel):
   editable_: Editable = Field(alias='editable')
   schema_: List[SchemaDetail] = Field(alias='schema')

Errors when using Sqlmodel library:

from sqlmodel import SQLModel, Field

from typing import List, Optional

class Editable(SQLModel):
    only_fact: Optional[bool] = Field(default=None)
    dispose: Optional[int] = Field(default=None)
    optional: Optional[bool] = Field(default=None)

class SchemaDetail(SQLModel):
    id: int
    title: str
    parent_id: Optional[int] = Field(default=None)
    values: List[float]

class MyClass(SQLModel):
   editable_: Editable = Field(alias='editable')
   schema_: List[SchemaDetail] = Field(alias='schema')


Solution

  • Take a look on the official repository's discussion: https://github.com/tiangolo/sqlmodel/discussions/725. As the title says:

    Field alias broken since SQLModel 0.0.14