| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- Metadata-Version: 2.1
- Name: sqlmodel
- Version: 0.0.22
- Summary: SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.
- Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
- Classifier: Development Status :: 4 - Beta
- Classifier: Framework :: AsyncIO
- Classifier: Intended Audience :: Developers
- Classifier: Intended Audience :: Science/Research
- Classifier: Intended Audience :: System Administrators
- Classifier: License :: OSI Approved :: MIT License
- Classifier: Programming Language :: Python :: 3 :: Only
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
- Classifier: Programming Language :: Python :: 3.10
- Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: 3.12
- Classifier: Topic :: Database
- Classifier: Topic :: Database :: Database Engines/Servers
- Classifier: Topic :: Internet
- Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
- Classifier: Topic :: Internet :: WWW/HTTP
- Classifier: Typing :: Typed
- Project-URL: Homepage, https://github.com/fastapi/sqlmodel
- Project-URL: Documentation, https://sqlmodel.tiangolo.com
- Project-URL: Repository, https://github.com/fastapi/sqlmodel
- Project-URL: Issues, https://github.com/fastapi/sqlmodel/issues
- Project-URL: Changelog, https://sqlmodel.tiangolo.com/release-notes/
- Requires-Python: >=3.7
- Requires-Dist: SQLAlchemy<2.1.0,>=2.0.14
- Requires-Dist: pydantic<3.0.0,>=1.10.13
- Description-Content-Type: text/markdown
- <p align="center">
- <a href="https://sqlmodel.tiangolo.com"><img src="https://sqlmodel.tiangolo.com/img/logo-margin/logo-margin-vector.svg#only-light" alt="SQLModel"></a>
- </p>
- <p align="center">
- <em>SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.</em>
- </p>
- <p align="center">
- <a href="https://github.com/fastapi/sqlmodel/actions?query=workflow%3ATest" target="_blank">
- <img src="https://github.com/fastapi/sqlmodel/workflows/Test/badge.svg" alt="Test">
- </a>
- <a href="https://github.com/fastapi/sqlmodel/actions?query=workflow%3APublish" target="_blank">
- <img src="https://github.com/fastapi/sqlmodel/workflows/Publish/badge.svg" alt="Publish">
- </a>
- <a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/sqlmodel" target="_blank">
- <img src="https://coverage-badge.samuelcolvin.workers.dev/fastapi/sqlmodel.svg" alt="Coverage">
- <a href="https://pypi.org/project/sqlmodel" target="_blank">
- <img src="https://img.shields.io/pypi/v/sqlmodel?color=%2334D058&label=pypi%20package" alt="Package version">
- </a>
- </p>
- ---
- **Documentation**: <a href="https://sqlmodel.tiangolo.com" target="_blank">https://sqlmodel.tiangolo.com</a>
- **Source Code**: <a href="https://github.com/fastapi/sqlmodel" target="_blank">https://github.com/fastapi/sqlmodel</a>
- ---
- SQLModel is a library for interacting with <abbr title='Also called "Relational databases"'>SQL databases</abbr> from Python code, with Python objects. It is designed to be intuitive, easy to use, highly compatible, and robust.
- **SQLModel** is based on Python type annotations, and powered by <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> and <a href="https://sqlalchemy.org/" class="external-link" target="_blank">SQLAlchemy</a>.
- The key features are:
- * **Intuitive to write**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging. Designed to be easy to use and learn. Less time reading docs.
- * **Easy to use**: It has sensible defaults and does a lot of work underneath to simplify the code you write.
- * **Compatible**: It is designed to be compatible with **FastAPI**, Pydantic, and SQLAlchemy.
- * **Extensible**: You have all the power of SQLAlchemy and Pydantic underneath.
- * **Short**: Minimize code duplication. A single type annotation does a lot of work. No need to duplicate models in SQLAlchemy and Pydantic.
- ## Sponsors
- <!-- sponsors -->
- <a href="https://www.govcert.lu" target="_blank" title="This project is being supported by GOVCERT.LU"><img src="https://sqlmodel.tiangolo.com/img/sponsors/govcert.png"></a>
- <!-- /sponsors -->
- ## SQL Databases in FastAPI
- <a href="https://fastapi.tiangolo.com" target="_blank"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" style="width: 20%;"></a>
- **SQLModel** is designed to simplify interacting with SQL databases in <a href="https://fastapi.tiangolo.com" class="external-link" target="_blank">FastAPI</a> applications, it was created by the same <a href="https://tiangolo.com/" class="external-link" target="_blank">author</a>. 😁
- It combines SQLAlchemy and Pydantic and tries to simplify the code you write as much as possible, allowing you to reduce the **code duplication to a minimum**, but while getting the **best developer experience** possible.
- **SQLModel** is, in fact, a thin layer on top of **Pydantic** and **SQLAlchemy**, carefully designed to be compatible with both.
- ## Requirements
- A recent and currently supported <a href="https://www.python.org/downloads/" class="external-link" target="_blank">version of Python</a>.
- As **SQLModel** is based on **Pydantic** and **SQLAlchemy**, it requires them. They will be automatically installed when you install SQLModel.
- ## Installation
- Make sure you create a <a href="https://sqlmodel.tiangolo.com/virtual-environments/" class="external-link" target="_blank">virtual environment</a>, activate it, and then install SQLModel, for example with:
- <div class="termy">
- ```console
- $ pip install sqlmodel
- ---> 100%
- Successfully installed sqlmodel
- ```
- </div>
- ## Example
- For an introduction to databases, SQL, and everything else, see the <a href="https://sqlmodel.tiangolo.com/databases/" target="_blank">SQLModel documentation</a>.
- Here's a quick example. ✨
- ### A SQL Table
- Imagine you have a SQL table called `hero` with:
- * `id`
- * `name`
- * `secret_name`
- * `age`
- And you want it to have this data:
- | id | name | secret_name | age |
- -----|------|-------------|------|
- | 1 | Deadpond | Dive Wilson | null |
- | 2 | Spider-Boy | Pedro Parqueador | null |
- | 3 | Rusty-Man | Tommy Sharp | 48 |
- ### Create a SQLModel Model
- Then you could create a **SQLModel** model like this:
- ```Python
- 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
- ```
- That class `Hero` is a **SQLModel** model, the equivalent of a SQL table in Python code.
- And each of those class attributes is equivalent to each **table column**.
- ### Create Rows
- Then you could **create each row** of the table as an **instance** of the model:
- ```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)
- ```
- This way, you can use conventional Python code with **classes** and **instances** that represent **tables** and **rows**, and that way communicate with the **SQL database**.
- ### Editor Support
- Everything is designed for you to get the best developer experience possible, with the best editor support.
- Including **autocompletion**:
- <img class="shadow" src="https://sqlmodel.tiangolo.com/img/index/autocompletion01.png">
- And **inline errors**:
- <img class="shadow" src="https://sqlmodel.tiangolo.com/img/index/inline-errors01.png">
- ### Write to the Database
- You can learn a lot more about **SQLModel** by quickly following the **tutorial**, but if you need a taste right now of how to put all that together and save to the database, you can do this:
- ```Python hl_lines="18 21 23-27"
- 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()
- ```
- That will save a **SQLite** database with the 3 heroes.
- ### Select from the Database
- Then you could write queries to select from that same database, for example with:
- ```Python hl_lines="15-18"
- 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)
- ```
- ### Editor Support Everywhere
- **SQLModel** was carefully designed to give you the best developer experience and editor support, **even after selecting data** from the database:
- <img class="shadow" src="https://sqlmodel.tiangolo.com/img/index/autocompletion02.png">
- ## SQLAlchemy and Pydantic
- That class `Hero` is a **SQLModel** model.
- But at the same time, ✨ it is a **SQLAlchemy** model ✨. So, you can combine it and use it with other SQLAlchemy models, or you could easily migrate applications with SQLAlchemy to **SQLModel**.
- And at the same time, ✨ it is also a **Pydantic** model ✨. You can use inheritance with it to define all your **data models** while avoiding code duplication. That makes it very easy to use with **FastAPI**.
- ## License
- This project is licensed under the terms of the [MIT license](https://github.com/fastapi/sqlmodel/blob/main/LICENSE).
|