What is Alchemical?
-------------------
Alchemical is a wrapper for SQLAlchemy that simplifies some aspects of
its configuration. It is inspired by the
`Flask-SQLAlchemy `_
extension for Flask.
Alchemical uses the newer 2.0 style query API introduced in SQLAlchemy 1.4,
and can be used with or without the Flask framework. It can also be used
with asynchronous applications based on the ``asyncio`` package.
Examples
--------
The following example creates a SQLite database with a ``user`` table, inserts
a few users, and finally prints the users to the console.
::
from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column
from alchemical import Alchemical, Model
class User(Model):
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(128))
def __repr__(self):
return f''
db = Alchemical('sqlite:///users.sqlite')
db.drop_all()
db.create_all()
with db.begin() as session:
for name in ['mary', 'joe', 'susan']:
session.add(User(name=name))
with db.Session() as session:
print(session.scalars(User.select()).all())
The next example implements the same application, but using ``asyncio``::
import asyncio
from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column
from alchemical.aio import Alchemical, Model
class User(Model):
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(128))
def __repr__(self):
return f''
async def main():
db = Alchemical('sqlite:///users.sqlite')
await db.drop_all()
await db.create_all()
async with db.begin() as session:
for name in ['mary', 'joe', 'susan']:
session.add(User(name=name))
async with db.Session() as session:
print((await session.scalars(User.select())).all())
asyncio.run(main())