Managers for SQLAlchemy.
Manager for model, methods were added during runtime to query.
Installation
$ [sudo] pip install advanced-sqlalchemy-manager
Documentation
ManagedQuery
Managed query that replaces sqlalchemy.query class
Example:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
from alchmanager import ManagedQuery, BaseQueryManager
engine = create_engine('sqlite:///:memory:')
session_factory = sessionmaker(query_cls=ManagedQuery, bind=engine)
session = session_factory()
Base = declarative_base()
class Person(Base):
__tablename__ = 'persons'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
class PersonQueryManager(BaseQueryManager):
__model__ = Person
@staticmethod
def older_than(query: ManagedQuery, age: int) -> ManagedQuery:
return query.filter(Person.age > age)
@staticmethod
def younger_than(query: ManagedQuery, age: int):
return query.filter(Person.age < age)
@staticmethod
def first_of_exact_age(query: ManagedQuery, age: int):
return query.filter(Person.age == age).first()
filtered_persons = session.query(Person).older_than(30).filter(Person.name.contains('_')).younger_than(60).all()
person_25_years_old = session.query(Person).first_of_exact_age(25)
ManagedSession
Managed session.
Use decorator load_manager() to register query managers into session.
Registered that way session managers will be usable on any model.
Example:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, Boolean
from alchmanager import ManagedQuery, ManagedSession, BaseQueryManager
engine = create_engine('sqlite:///:memory:')
session_factory = sessionmaker(class_=ManagedSession, bind=engine)
session = session_factory()
Base = declarative_base()
class Person(Base):
__tablename__ = 'persons'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String)
is_public = Column(Boolean, nullable=False, default=False)
@session.load_manager()
class BookQueryManager(BaseQueryManager):
@staticmethod
def is_book_public(query: ManagedQuery) -> ManagedQuery:
return query.filter(Book.is_public.is_(True))
count_of_filtered_books = session.query(Book).is_book_public().count()
# This will produce broken query because is_public does not exists in Person model
persons = session.query(Person).is_book_public().count()
Metadata
Release files for advanced-sqlalchemy-manager 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| advanced-sqlalchemy-manager-0.1.1.tar.gz | 16.2 kB | Without provenance | Details for advanced-sqlalchemy-manager-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| advanced_sqlalchemy_manager-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for advanced_sqlalchemy_manager-0.1.1-py3-none-any.whl |
Total release size: 32.3 kB
Release files / advanced-sqlalchemy-manager-0.1.1.tar.gz
| Download URL | advanced-sqlalchemy-manager-0.1.1.tar.gz |
|---|---|
| Size | 16.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
832ef670764249bab9a341e0aa938a7f41e80b866f5fe98dc9c0783a99ade84c
|
|
BLAKE2b-256 checksum How to use checksums |
ea0daedb18c0d6b8f948eb9bebd39db256b09291381aaab1cd2f6f5a06b06760
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.2
|
Release files / advanced_sqlalchemy_manager-0.1.1-py3-none-any.whl
| Download URL | advanced_sqlalchemy_manager-0.1.1-py3-none-any.whl |
|---|---|
| Size | 16.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8166b0d786804c0dba20efa3a3229cf5e70b0e179dd3f642779be6f9ff3b51cd
|
|
BLAKE2b-256 checksum How to use checksums |
40dd7c4dfd6ffafe710ca16ac78aad0d77e745b6a4053e031556126f7ae3c3ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.2
|
Security for advanced-sqlalchemy-manager 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.