First Check
Commit to Help
Example Code
from sql model import field, SQLModel
from pydantic import BaseModel
"""
I want to define these separately, and have one of them be extended by the other
"""
UserDataSchema(BaseModel): # Name for comparison
""" Data model, not tied to the database (i.e. sql) itself can be re-used"""
user_id: int
project_id: id
# How can this inherit UserDataSchema without re-definition?
UserModel(SQLModel, table=True): # Name for comparison
""" Data model, not tied to the database (i.e. sql) itself can be re-used"""
user_id: Optional[int] = Field(default=None, foreign_key="user.id")
project_id: Optional[int] = Field(default=None, foreign_key="project.id")
Description
The issue at hand is that I am not seeing a way from the docs to decouple the data schema from the database schema. Say I have a large platform, with multiple libraries and services. In such case, if we have a static data schema (like our use case), its very valuable to define the data schema in place (say schema.py as below:
UserDataSchema(BaseModel): # Name for comparison
""" Data model, not tied to the database (i.e. sql) itself can be re-used"""
user_id: int
project_id: id
The problem, is that I am not seeing a way to seamlessly translate from the pydantic.BaseModel to the standard SQLModel without having to re-define the entire schema and basically not re-using anything (other than perhaps some functions from the parent class)
I think SQL Alchemy has done it gracefully with their integration of attrs and dataclassess here. Which would look ""in theory"", like this
from sqlalchemy import Table, Column, Integer, ForeignKey
User(SQLModel, UserDataSchema, table=True): # Name for comparison
__table__ = Table(
Column("user_id", Integer, ForeignKey("user.id"), primary_key=True),
Column("project_id", Integer, ForeignKey("project.id"), primary_key=True),
)
Am I missing something? is there a straight forward to accomplish something along these lines? Based on the current docs, the only way to do it would be with:
class UserDataSchema(BaseModel):
user_id: int
project_id: int
class User(SQLModel, UserDataSchema, table=True):
user_id: Optional[int] = Field(default=None, primary_key=True)
project_id: Optional[int] = Field(default=None, primary_key=True)
However, that defeats the purpose as we have to redefine each attribute again.
Operating System
Windows
Operating System Details
No response
SQLModel Version
0.0.8
Python Version
3.8
Additional Context
No response
First Check
Commit to Help
Example Code
Description
The issue at hand is that I am not seeing a way from the docs to decouple the data schema from the database schema. Say I have a large platform, with multiple libraries and services. In such case, if we have a static data schema (like our use case), its very valuable to define the data schema in place (say
schema.pyas below:The problem, is that I am not seeing a way to seamlessly translate from the
pydantic.BaseModelto the standardSQLModelwithout having to re-define the entire schema and basically not re-using anything (other than perhaps some functions from the parent class)I think SQL Alchemy has done it gracefully with their integration of
attrsanddataclassesshere. Which would look ""in theory"", like thisAm I missing something? is there a straight forward to accomplish something along these lines? Based on the current docs, the only way to do it would be with:
However, that defeats the purpose as we have to redefine each attribute again.
Operating System
Windows
Operating System Details
No response
SQLModel Version
0.0.8
Python Version
3.8
Additional Context
No response