---
# SQLAlchemy Admin for Starlette/FastAPI
## General info
SQLAdmin is a flexible Admin interface for SQLAlchemy models.
Main features include:
* [SQLAlchemy](https://github.com/sqlalchemy/sqlalchemy) sync/async engines
* [Starlette](https://github.com/encode/starlette) integration
* [FastAPI](https://github.com/tiangolo/fastapi) integration
* [WTForms](https://github.com/wtforms/wtforms) form building
* [SQLModel](https://github.com/tiangolo/sqlmodel) support
* UI using [Tabler](https://github.com/tabler/tabler)
---
**Documentation**: [https://smithyhq.github.io/sqladmin](https://smithyhq.github.io/sqladmin)
**Source Code**: [https://github.com/smithyhq/sqladmin](https://github.com/smithyhq/sqladmin)
**Live Demo**: [https://sqladmin-demo.vercel.app/admin](https://sqladmin-demo.vercel.app/admin) (Username: `superadmin` Password: `superadmin`)
---
## Installation
Install using `pip`:
```shell
$ pip install sqladmin
```
Some features need extra packages, which are grouped into optional extras:
| Extra | Installs | Enables |
| ------ | ----------------- | -------------------------------------------------------------------------------------------------- |
| `auth` | `itsdangerous` | Session-backed [authentication](https://smithyhq.github.io/sqladmin/authentication/) |
| `i18n` | `babel` | [Internationalization](https://smithyhq.github.io/sqladmin/internationalization/) and localization |
| `full` | both of the above | Everything |
```shell
$ pip install "sqladmin[auth]"
$ pip install "sqladmin[i18n]"
$ pip install "sqladmin[full]"
```
---
## Screenshots
## Quickstart
Let's define an example SQLAlchemy model:
```python
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_base
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
Base.metadata.create_all(engine) # Create tables
```
If you want to use `SQLAdmin` with `FastAPI`:
```python
from fastapi import FastAPI
from sqladmin import Admin, ModelView
app = FastAPI()
admin = Admin(app, engine)
class UserAdmin(ModelView, model=User):
column_list = [User.id, User.name]
admin.add_view(UserAdmin)
```
Or if you want to use `SQLAdmin` with `Starlette`:
```python
from sqladmin import Admin, ModelView
from starlette.applications import Starlette
app = Starlette()
admin = Admin(app, engine)
class UserAdmin(ModelView, model=User):
column_list = [User.id, User.name]
admin.add_view(UserAdmin)
```
Now visiting `/admin` on your browser you can see the `SQLAdmin` interface.
## Related projects and inspirations
* [Flask-Admin](https://github.com/flask-admin/flask-admin) Admin interface for Flask supporting different database backends and ORMs. This project has inspired SQLAdmin extensively and most of the features and configurations are implemented the same.
* [FastAPI-Admin](https://github.com/fastapi-admin/fastapi-admin) Admin interface for FastAPI which works with `TortoiseORM`.
* [Dashboard](https://github.com/encode/dashboard) Admin interface for ASGI frameworks which works with the `orm` package.