Skip to main content

No project description provided

Project description

SQLalchemyAPI

Test Coverage Package version Supported Python versions

SQLAlchemy API is a library that helps to turn the SQLAlchemy models into a REST API. It uses the power of Pydantic 2, to validate and serialize the data. This is a framework-agnostic library that can be used with any web framework. Currently, it provides support for Starlette and FastAPI.


Documentation: https://nacosdev.github.io/sqlalchemy_api

Source Code: https://github.com/nacosdev/sqlalchemy_api


Table of Contents


Requirements

  • Python>=3.7
  • SQLAlchemy>=1.4
  • Pydantic>=2

Installation

pip install sqlalchemy-api

Example

Create it

  • Create a file main.py with SQLAlchemy models and mount the crud using one of the adapters, in this example we will use the FastAPI adapter:
from sqlalchemy_api.adapters.fastapi_crud import APICrud
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy.orm import relationship, mapped_column, Mapped
from sqlalchemy.ext.declarative import declarative_base
from fastapi import FastAPI
from typing import List

Base = declarative_base()

engine = create_engine(
    "sqlite:///example.db",
    connect_args={"check_same_thread": False},
)

class User(Base):
    __tablename__ = "user"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(default="John Doe")
    age: Mapped[int] = mapped_column(nullable=False)
    posts: Mapped[List['Post']] = relationship(back_populates="user")

class Post(Base):
    __tablename__ = "post"
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str] = mapped_column()
    content: Mapped[str] = mapped_column()
    user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), nullable=False)
    user: Mapped['User'] = relationship(back_populates="posts")

Base.metadata.create_all(engine)  # Create tables

user_crud_router = APICrud(User, engine)
post_crud_router = APICrud(Post, engine)

app = FastAPI()
app.include_router(user_crud_router, prefix="/user", tags=["User"])
app.include_router(post_crud_router, prefix="/post", tags=["Post"])

You will also need an ASGI server and FastAPI to be able to run this app, both are optional dependencies of SQLAlchemy API:

pip install sqlalchemy-api[fastapi]

Run it

uvicorn main:app --reload

Use it

Endpoints are automatically generated for the defined models and the FastAPI adapter provides automatic Swagger documentation, you can access localhost:8000/docs to interact with them:

Swagger

SQLAlchemyAPI also provides different operators depending on the column data type, to filter the data:

Swagger2

The data returned is automatically paginated and serialized, including the relationships defined in the models:

Swagger3

Post data is automatically validated and serialized using Pydantic, for example, if you try to create a user wihout the required age field, you will get an error like this:

Swagger4

License

sqlalchemy-api is distributed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlalchemy_api-0.0.2.tar.gz (301.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlalchemy_api-0.0.2-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy_api-0.0.2.tar.gz.

File metadata

  • Download URL: sqlalchemy_api-0.0.2.tar.gz
  • Upload date:
  • Size: 301.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for sqlalchemy_api-0.0.2.tar.gz
Algorithm Hash digest
SHA256 5035dc554ce02f051e92c1568ce2099d8005126229e7b24c6dbffe73d5395ed4
MD5 cdc0f4532cafdd97c9b2d08124e90818
BLAKE2b-256 038e3bf6d348742ddb343bd440796bcf38ceba0ffcb234e58fbe5753208b9011

See more details on using hashes here.

File details

Details for the file sqlalchemy_api-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: sqlalchemy_api-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for sqlalchemy_api-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 88efab6e93f79d176b17fb95988600c55c08a5c8af7288f2a6daf8b22a377c91
MD5 33e191f9e908b9cf9354a5420a8831c6
BLAKE2b-256 e3fffed02b5bd8c2045c09990ec68021027b4a9dac31a1c9a9edced747303891

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page