SQLModel, базы данных SQL на Python, разработанные для простоты, совместимости и надежности.
Документация : https://sqlmodel.tiangolo.com.
Исходный код : https://github.com/fastapi/sqlmodel.
SQLModel — это библиотека для взаимодействия с базами данных SQL из кода Python, с объектами Python. Он разработан интуитивно понятным, простым в использовании, высокосовместимым и надежным.
SQLModel основан на аннотациях типов Python и поддерживается Pydantic и SQLAlchemy.
Ключевые особенности:
SQLModel предназначена для упрощения взаимодействия с базами данных SQL в приложениях FastAPI, создана тем же автором. ?
Он сочетает в себе SQLAlchemy и Pydantic и пытается максимально упростить код, который вы пишете, позволяя свести дублирование кода к минимуму , но при этом получая при этом максимально возможный опыт разработчика .
SQLModel , по сути, представляет собой тонкий слой поверх Pydantic и SQLAlchemy , тщательно разработанный для совместимости с обоими.
Последняя и поддерживаемая в настоящее время версия Python.
Поскольку SQLModel основан на Pydantic и SQLAlchemy , они требуются. Они будут автоматически установлены при установке SQLModel.
Обязательно создайте виртуальную среду, активируйте ее, а затем установите SQLModel, например, с помощью:
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
Введение в базы данных, SQL и все остальное см. в документации SQLModel.
Вот краткий пример.
Представьте, что у вас есть таблица SQL под названием hero
с:
id
name
secret_name
age
И вы хотите, чтобы у него были эти данные:
идентификатор | имя | секретное_имя | возраст |
---|---|---|---|
1 | Мертвый пруд | Дайв Уилсон | нулевой |
2 | Мальчик-Паук | Педро Паркеадор | нулевой |
3 | Ржавый Человек | Томми Шарп | 48 |
Затем вы можете создать модель SQLModel следующим образом:
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
Этот класс Hero
представляет собой модель SQLModel , эквивалент таблицы SQL в коде Python.
И каждый из этих атрибутов класса эквивалентен каждому столбцу таблицы .
Затем вы можете создать каждую строку таблицы как экземпляр модели:
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 )
Таким образом, вы можете использовать обычный код Python с классами и экземплярами , представляющими таблицы и строки , и таким образом взаимодействовать с базой данных SQL .
Все создано для того, чтобы вы могли получить наилучшие возможности разработчика с лучшей поддержкой редактора.
Включая автозаполнение :
И встроенные ошибки :
Вы можете узнать гораздо больше о SQLModel , быстро следуя этому руководству , но если вам прямо сейчас нужно ощутить, как собрать все это вместе и сохранить в базе данных, вы можете сделать это:
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 ()
Это сохранит базу данных SQLite с тремя героями.
Затем вы можете написать запросы для выбора из той же базы данных, например:
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 был тщательно разработан, чтобы предоставить вам наилучшие возможности разработчика и поддержку редактора даже после выбора данных из базы данных:
Этот класс Hero
является моделью SQLModel .
Но в то же время это модель SQLAlchemy . Таким образом, вы можете объединить его и использовать с другими моделями SQLAlchemy или легко перенести приложения с SQLAlchemy на SQLModel .
И в то же время это еще и модель Pydantic . С ним вы можете использовать наследование, чтобы определить все ваши модели данных , избегая при этом дублирования кода. Это делает его очень простым в использовании с FastAPI .
Этот проект лицензируется на условиях лицензии MIT.