Flask SQLAlchemy Compat
Support the compatibility between flask_sqlalchemy and flask_sqlalchemy_lite. It allows users to make minimal changes when they need to migrate from either one of these two packages to each other.
The main motivation of this package is because flask_sqlalchemy_lite does not support python<=3.8. This package is designed for providing the similar usages when users have to make the flask_sqlalchemy_lite working with python<=3.8 by using flask_sqlalchemy. In this case, users can get rid of the difficulty of maintaining two sets of codes.
[!WARNING] This package is designed for
sqlalchemy>=2.0.0only. If you are using an older version. You cannot use this package.
[!WARNING] To make this package work with
python=3.7, users should install an unofficialflask-sqlalchemyversion.
1. Install
Intall the latest released version of this package by using the PyPI source:
python -m pip install flask-sqlalchemy-compat
or use the following commands to install the developing version from the GitHub Source when you have already installed Git :hammer::
python -m pip install "flask-sqlalchemy-compat[dev] @ git+https://github.com/cainmagi/flask-sqlalchemy-compat.git"
[!WARNING] To make this package work with
python=3.7, users should install an unofficialflask-sqlalchemyversion. Seehttps://github.com/pallets-eco/flask-sqlalchemy/issues/1140#issuecomment-1577921154
This unofficial version can be installed by:
python -m pip install flask-sqlalchemy-compat[backends]
2. Usage
When you are using flask-sqlalchemy-lite, using the following codes will let your codes fall back to the compatible mode if flask-sqlalchemy-lite is not installed but flask-sqlalchemy is installed.
import sqlalchemy as sa
import sqlalchemy.orm as sa_orm
import flask_sqlalchemy_compat as fsc
class _Base(sa_orm.DeclarativeBase): ...
db, Base = fsc.get_flask_sqlalchemy_lite(_Base)
class NewModel(Base):
__tablename__ = "new_model"
id: sa_orm.Mapped[int] = sa_orm.mapped_column(primary_key=True)
name: sa_orm.Mapped[str] = sa_orm.mapped_column()
if __name__ == "__main__":
import os
import flask
app = flask.Flask(__name__, instance_path=os.path.abspath("./instance"))
app.config.update({"SQLALCHEMY_ENGINES": {"default": "sqlite:///main.db"}})
db.init_app(app)
with app.app_context():
Base.metadata.create_all(db.engine)
db.session.add(NewModel(name="new"))
db.session.commit()
model = db.session.scalar(sa.select(NewModel))
print(model.id, model.name) if model is not None else print("NOT FOUND.")
The above codes will works no matter flask_sqlalchemy_lite or flask_sqlalchemy is installed.
Similarly, the following example is designed for the codes written with flask_sqlalchemy. The codes fall back to the compatible mode if flask-sqlalchemy is not installed but flask-sqlalchemy-lite is installed.
import sqlalchemy as sa
import sqlalchemy.orm as sa_orm
import flask_sqlalchemy_compat as fsc
class _Base(sa_orm.DeclarativeBase): ...
db = fsc.get_flask_sqlalchemy(_Base)
class NewModel(db.Model):
id: sa_orm.Mapped[int] = sa_orm.mapped_column(primary_key=True)
name: sa_orm.Mapped[str] = sa_orm.mapped_column()
if __name__ == "__main__":
import os
import flask
app = flask.Flask(__name__, instance_path=os.path.abspath("./instance"))
app.config.update({"SQLALCHEMY_DATABASE_URI": "sqlite:///main.db"})
db.init_app(app)
with app.app_context():
db.create_all()
# Indeed, flask_sqlalchemy has a type hint issue until `3.1.x`.
# But it does not cause issues in run time. See
# https://github.com/pallets-eco/flask-sqlalchemy/issues/1312
db.session.add(NewModel(name="new"))
db.session.commit()
model = db.session.scalar(sa.select(NewModel))
print(model.id, model.name) if model is not None else print("NOT FOUND.")
The magic happens if you run the first example with only flask-sqlalchemy installed and the second example with only flask-sqlalchemy-lite installed.
Compared to the above minimal examples, we also provided a usage.py file and example applications in the examples/ folder. Check them to view more details.
[!TIP] To run the demos in
examples, you need to install the optional dependencies bypython -m pip install flask-sqlalchemy-compat[example,backends]
3. Documentation
Check the documentation to find more details about the examples and APIs.
https://cainmagi.github.io/flask-sqlalchemy-compat/
4. Contributing
5. Changelog
Metadata
Release files for Flask-SQLAlchemy-compat 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flask_sqlalchemy_compat-0.2.2.tar.gz | 149.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| Flask_SQLAlchemy_compat-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 178.7 kB
Release files / flask_sqlalchemy_compat-0.2.2.tar.gz
| Download URL | flask_sqlalchemy_compat-0.2.2.tar.gz |
|---|---|
| Size | 149.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
756fb9cc1c936b0db6e9213a3b437d6447ab723041314cc9dfc88eff367d4c9d
|
|
BLAKE2b-256 checksum How to use checksums |
28e8455ba8b139059cf7fb872ba79f7d0ac55e595d85df5d02ee2237367a24d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 31, 2024.
Transparency logRelease files / Flask_SQLAlchemy_compat-0.2.2-py3-none-any.whl
| Download URL | Flask_SQLAlchemy_compat-0.2.2-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
55ed41a099abd8bcc6d77fe16660ed96fe5ad313391d920481419568c26372d7
|
|
BLAKE2b-256 checksum How to use checksums |
a21e7578d70c7e304a6ba40cc2b2592023a26efe7dfe4c358c4249ff1062b958
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 31, 2024.
Transparency log