SqlAlchemyTools provides similar functionality to Flask-SqlAlchemy & Flask-Migrate without being dependant on Flask.
Project description
SqlAlchemyTools
SqlAlchemyTools provides similar functionality to Flask-SqlAlchemy & Flask-Migrate without being dependant on Flask.
Installation
Install SqlAlchemyTools with pip:
pip install sqlalchemy-tools
Features
- Database:
- Just by instantiating with Database(), SqlAlchemyTools automatically creates the session, model and everything necessary for SQLAlchemy.
- Works with & without a Flask app with minimal code change
- Thread safe by using
scoped_session
- Integration with Pandas to allow quick dataframe insertion and retriving queries as dataframes
- It provides easy methods such as query(), create(), update(), delete(), to select, create, update, delete entries respectively.
- Autogenerate the
__tablename__
as the snake case equivalent on the model name if not explictly defined (not pluralised) - It uses Arrow for DateTime
- DateTime is saved in UTC and uses the ArrowType from the SQLAlchemy-Utils
- Added some data types: JSONType, EmailType, and the whole SQLAlchemy-Utils Type
- db.now -> gives you the Arrow UTC type
- Paginated results
- Pretty object representation
- It is still SQLAlchemy. You can access all the SQLAlchemy awesomeness
- Migration:
- Inbuilt migration support similar to Flask-migrate
- Create a
manage.py
file to easily migrate your database
- ModelFrom:
- Quickly add all the fields of a model to a WTF form
- Supports
include
,exclude
,only
Contents
- SqlAlchemyTools
- Installation
- Features
- Contents
- Quick Overview:
- How to use
Quick Overview:
Database
Create the model
from sqlalchemy_tools import Database
db = Database('sqlite://')
class User(db.Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = db.Column(db.String(25))
location = db.Column(db.String(50), default="USA")
last_access = db.Column(db.Datetime)
Retrieve all records
User.query.all()
Create new record
user = User.create(name="Mardix", location="Moon")
# or
user = User(name="Mardix", location="Moon").save()
Get a record by primary key (id)
user = User.get(1234)
Update record from primary key
user = User.get(1234)
if user:
user.update(location="Neptune")
Update record from query iteration
for user in User.query:
user.update(last_access=db.utcnow())
Delete a record
user = User.get(1234)
if user:
user.delete()
Query with filter
all = User.query.filter(User.location == "USA")
for user in users:
...
Migration
SqlAlchemyTools handles SQLAlchemy database migrations using Alembic. The database operations are made available through a command-line interface.
Why use SqlAlchemyTools migration vs. Alembic directly
SqlAlchemyTools configures Alembic in the proper way to work with your database whether it is with or without Flask. In terms of the actual database migrations, everything is handled by Alembic so you get exactly the same functionality.
Create manage.py
To support database migrations, you need to create a manage.py
file.
The file can be called anything
from sqlalchemy_tools.migration import Migrate, migrate_manager
from sqlalchemy_tools import Database
# create/import your database
db = Database('sqlite:///tmp.db')
# create a `migrate` object that is linked to your database
migrate = Migrate(db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
surname = db.Column(db.String(128))
if __name__ == '__main__':
migrate_manager.main()
Initialise migrations folder
The migrations
folder need to be initialise which will contain your database versions:
python manage.py init
Create a new migration
Whenever there is a change to the models that you want reflected in the database:
python manage.py migrate -m "Intial migration"
Upgrade database
To upgrade the database to the latest migration:
python manage.py upgrade
Downgrade database
To downgrade the database by 1 migration:
python manage.py downgrade
Help
To see all the commands that are available run:
python manage.py --help
ModelForm
Make a Flask compatible version of the WTForms-Alchemy ModelForm
from sqlalchemy_tools import create_model_form
from sqlalchemy_tools import Database
# create/import your database
db = Database('sqlite:///tmp.db')
ModelForm = create_model_form(db)
class UserForm(ModelForm):
class Meta:
model = User
exclude = ['last_access']
How to use
Complete guides for the different modules can be found below:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for SqlAlchemy_Tools-0.1.0b9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfbb05fdc73c732f8a4f1fb7e13f8e9e58b6b60787c7e5adff3db0babc69b159 |
|
MD5 | c0958e3b1cc598a530dbfe7cf8a2c70c |
|
BLAKE2b-256 | 30a03317093aa0eef89877423634f4dd8b1b1f61e1b21541121efdf663543d6c |