단순성, 호환성 및 견고성을 위해 설계된 Python의 SQL 데이터베이스인 SQLModel입니다.
문서 : https://sqlmodel.tiangolo.com
소스코드 : https://github.com/fastapi/sqlmodel
SQLModel은 Python 개체를 사용하여 Python 코드에서 SQL 데이터베이스와 상호 작용하기 위한 라이브러리입니다. 직관적이고 사용하기 쉬우며 호환성이 뛰어나고 견고하게 설계되었습니다.
SQLModel은 Python 유형 주석을 기반으로 하며 Pydantic 및 SQLAlchemy를 기반으로 합니다.
주요 기능은 다음과 같습니다.
SQLModel 은 FastAPI 애플리케이션에서 SQL 데이터베이스와의 상호 작용을 단순화하도록 설계되었으며 동일한 작성자가 만들었습니다. ?
SQLAlchemy와 Pydantic을 결합하여 작성하는 코드를 최대한 단순화하여 코드 중복을 최소화 하는 동시에 가능한 최고의 개발자 경험을 제공합니다.
실제로 SQLModel 은 Pydantic 및 SQLAlchemy 위에 있는 얇은 계층으로, 두 가지 모두와 호환되도록 세심하게 설계되었습니다.
현재 지원되는 최신 버전의 Python입니다.
SQLModel은 Pydantic 및 SQLAlchemy를 기반으로 하므로 이들이 필요합니다. SQLModel을 설치할 때 자동으로 설치됩니다.
가상 환경을 생성하고 활성화한 후 다음과 같이 SQLModel을 설치해야 합니다.
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
데이터베이스, SQL 및 기타 모든 것에 대한 소개는 SQLModel 설명서를 참조하세요.
다음은 간단한 예입니다.
다음을 포함하는 hero
라는 SQL 테이블이 있다고 가정해 보세요.
id
name
secret_name
age
그리고 당신은 다음과 같은 데이터를 갖고 싶어합니다:
ID | 이름 | 비밀_이름 | 나이 |
---|---|---|---|
1 | 데드폰드 | 다이브 윌슨 | null |
2 | 스파이더보이 | 페드로 파퀘아도르 | null |
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
클래스는 Python 코드의 SQL 테이블에 해당하는 SQLModel 모델입니다.
그리고 각 클래스 속성은 각 테이블 열과 동일합니다.
그런 다음 테이블의 각 행을 모델의 인스턴스 로 만들 수 있습니다.
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 ()
그러면 3명의 영웅이 포함된 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 라이선스 조건에 따라 라이선스가 부여됩니다.