SQLModel, bases de données SQL en Python, conçues pour la simplicité, la compatibilité et la robustesse.
Documentation : https://sqlmodel.tiangolo.com
Code source : https://github.com/fastapi/sqlmodel
SQLModel est une bibliothèque permettant d'interagir avec des bases de données SQL à partir du code Python, avec des objets Python. Il est conçu pour être intuitif, facile à utiliser, hautement compatible et robuste.
SQLModel est basé sur des annotations de type Python et alimenté par Pydantic et SQLAlchemy.
Les principales caractéristiques sont :
SQLModel est conçu pour simplifier l'interaction avec les bases de données SQL dans les applications FastAPI, il a été créé par le même auteur. ?
Il combine SQLAlchemy et Pydantic et essaie de simplifier au maximum le code que vous écrivez, vous permettant de réduire au minimum la duplication de code , mais tout en obtenant la meilleure expérience de développeur possible.
SQLModel est, en fait, une fine couche au-dessus de Pydantic et SQLAlchemy , soigneusement conçue pour être compatible avec les deux.
Une version récente et actuellement prise en charge de Python.
Comme SQLModel est basé sur Pydantic et SQLAlchemy , il les nécessite. Ils seront automatiquement installés lorsque vous installerez SQLModel.
Assurez-vous de créer un environnement virtuel, de l'activer, puis d'installer SQLModel, par exemple avec :
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
Pour une introduction aux bases de données, à SQL et à tout le reste, consultez la documentation SQLModel.
Voici un exemple rapide.
Imaginez que vous ayez une table SQL appelée hero
avec :
id
name
secret_name
age
Et vous voulez qu'il contienne ces données :
identifiant | nom | nom_secret | âge |
---|---|---|---|
1 | Deadpond | Plongée Wilson | nul |
2 | Garçon-araignée | Pedro Parqueador | nul |
3 | L'homme rouillé | Tommy Sharp | 48 |
Ensuite, vous pouvez créer un modèle SQLModel comme celui-ci :
from typing import Optional
from sqlmodel import Field , SQLModel
class Hero ( SQLModel , table = True ):
id : Optional [ int ] = Field ( default = None , primary_key = True )
name : str
secret_name : str
age : Optional [ int ] = None
Cette classe Hero
est un modèle SQLModel , l'équivalent d'une table SQL en code Python.
Et chacun de ces attributs de classe est équivalent à chaque colonne du tableau .
Ensuite, vous pouvez créer chaque ligne du tableau en tant qu'instance du modèle :
hero_1 = Hero ( name = "Deadpond" , secret_name = "Dive Wilson" )
hero_2 = Hero ( name = "Spider-Boy" , secret_name = "Pedro Parqueador" )
hero_3 = Hero ( name = "Rusty-Man" , secret_name = "Tommy Sharp" , age = 48 )
De cette façon, vous pouvez utiliser du code Python conventionnel avec des classes et des instances qui représentent des tables et des lignes , et ainsi communiquer avec la base de données SQL .
Tout est conçu pour que vous obteniez la meilleure expérience de développeur possible, avec le meilleur support d'éditeur.
Y compris la saisie semi-automatique :
Et les erreurs en ligne :
Vous pouvez en apprendre beaucoup plus sur SQLModel en suivant rapidement le didacticiel , mais si vous avez besoin d'un avant-goût dès maintenant de la façon de rassembler tout cela et de l'enregistrer dans la base de données, vous pouvez le faire :
from typing import Optional
from sqlmodel import Field , Session , SQLModel , create_engine
class Hero ( SQLModel , table = True ):
id : Optional [ int ] = Field ( default = None , primary_key = True )
name : str
secret_name : str
age : Optional [ int ] = None
hero_1 = Hero ( name = "Deadpond" , secret_name = "Dive Wilson" )
hero_2 = Hero ( name = "Spider-Boy" , secret_name = "Pedro Parqueador" )
hero_3 = Hero ( name = "Rusty-Man" , secret_name = "Tommy Sharp" , age = 48 )
engine = create_engine ( "sqlite:///database.db" )
SQLModel . metadata . create_all ( engine )
with Session ( engine ) as session :
session . add ( hero_1 )
session . add ( hero_2 )
session . add ( hero_3 )
session . commit ()
Cela permettra d'économiser une base de données SQLite avec les 3 héros.
Ensuite, vous pouvez écrire des requêtes pour sélectionner dans cette même base de données, par exemple avec :
from typing import Optional
from sqlmodel import Field , Session , SQLModel , create_engine , select
class Hero ( SQLModel , table = True ):
id : Optional [ int ] = Field ( default = None , primary_key = True )
name : str
secret_name : str
age : Optional [ int ] = None
engine = create_engine ( "sqlite:///database.db" )
with Session ( engine ) as session :
statement = select ( Hero ). where ( Hero . name == "Spider-Boy" )
hero = session . exec ( statement ). first ()
print ( hero )
SQLModel a été soigneusement conçu pour vous offrir la meilleure expérience de développement et la meilleure prise en charge des éditeurs, même après avoir sélectionné des données dans la base de données :
Cette classe Hero
est un modèle SQLModel .
Mais en même temps, c'est un modèle SQLAlchemy . Ainsi, vous pouvez le combiner et l'utiliser avec d'autres modèles SQLAlchemy, ou vous pouvez facilement migrer des applications avec SQLAlchemy vers SQLModel .
Et en même temps, c'est aussi un modèle Pydantic . Vous pouvez utiliser l'héritage avec pour définir tous vos modèles de données tout en évitant la duplication de code. Cela le rend très facile à utiliser avec FastAPI .
Ce projet est sous licence selon les termes de la licence MIT.