An improved Python interface to SQLite
Project description
isqlite
isqlite is an improved Python interface to SQLite. It has a more convenient API, support for database migrations, and a command-line interface.
Features
- An improved Python API.
- e.g.,
db.create("people", {"name": "John Doe"})
instead ofcursor.execute("INSERT INTO people VALUES ('John Doe')")
- Rows are returned as
OrderedDict
objects instead of tuples. - Helper methods to simplify common patterns, e.g.
get_or_create
.
- e.g.,
- Database migrations.
- Automatically diff the database against a schema defined in Python and apply the results.
- Or, manually alter the database schema from the command line using commands like
isqlite drop-table
andisqlite rename-column
.
- A command-line interface.
Usage
Python interface
from isqlite import Database
with Database(":memory:") as db:
# Create a new row in the database.
pk = db.create("employees", {"name": "John Doe", "age": 30})
# Retrieve the row as an OrderedDict.
person = db.get_by_rowid("employees", pk)
print(person["name"], person["age"])
# Update the row.
db.update_by_rowid("employees", pk, {"age": 35})
# Delete the row.
db.delete_by_rowid("employees", pk)
# Filter rows with a query.
employees = db.list(
"employees",
where="name LIKE :name_pattern AND age > 40",
values={"name_pattern": "John%"},
)
# Use raw SQL if necessary.
pairs = db.sql(
"""
SELECT
teams.name, employees.name
FROM
employees
INNER JOIN
teams
ON
employees.team = teams.id
"""
)
Database migrations
Automated
In schema.py
(the exact name of the file does not matter):
from base.sql import ForeignKeyColumn, IntegerColumn, Table, TextColumn
class Book(Table):
title = TextColumn(required=True)
author = ForeignKeyColumn(model="authors", required=True)
pages = IntegerColumn(required=False)
class Authors(Table):
name = TextColumn(required=True)
On the command-line (assuming your database is in db.sqlite3
):
$ isqlite --db db.sqlite3 --schema schema.py migrate
The isqlite migrate
command will compare the database file to the Python schema, and print out the changes required to make the database match the schema. To apply the changes, run isqlite migrate
again with the --write
flag.
Manual
The isqlite
command-line tool also supports a set of self-explanatory manual migration commands:
isqlite add-column
isqlite alter-column
isqlite create-table
isqlite drop-column
isqlite drop-table
isqlite rename-column
isqlite rename-table
isqlite reorder-columns
Limitations
isqlite is highly suitable for applications that use SQLite as an application file format, and for ad hoc operations and migrations on existing SQLite databases. It is less suitable for circumstances in which traditional database engines are used (e.g., web applications), because if you eventually decide that you need to migrate from SQLite to a full-scale RDMS like MySQL or Postgres, you will have to rewrite all the code that uses isqlite.
Compared to SQLAlchemy
SQLAlchemy is a Python SQL toolkit and ORM and one of the most popular standalone SQL libraries for Python.
- isqlite aims to be a replacement for Python's sqlite3 standard library, not a general-purpose database wrapper like SQLAlchemy. It does not support and will never support any database engine other than SQLite.
- isqlite has a small and easy-to-understand API.
- isqlite supports database migrations out of the box, while SQLAlchemy requires using an extension like Alembic.
- isqlite is not an object relational mapper (ORM). It does not map database row to native Python objects. It just returns them as regular ordered dictionaries.
- Note that SQLAlchemy includes an ORM but does not require that you use it.
- isqlite comes with a command-line interface.
API documentation
API documentation is available at https://isqlite.readthedocs.io/en/latest/.
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
File details
Details for the file isqlite-0.6.1.tar.gz
.
File metadata
- Download URL: isqlite-0.6.1.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8afdb6217727b76d8953c21aedce957c37275bc8395f245e12d40c55fb32e974 |
|
MD5 | 67a8bd6f6d07ddba5925ab43e8d37874 |
|
BLAKE2b-256 | 8ef69682576bc5a25054051a937af816ede9cd49d8c856fc041986f4ee57e37f |
File details
Details for the file isqlite-0.6.1-py3-none-any.whl
.
File metadata
- Download URL: isqlite-0.6.1-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09aff155afadf54b1529f0bf0f1884baef3391b0e67eb36073cc54b296dbf065 |
|
MD5 | 7ae084a9bd1f4c41741e0484369d4eda |
|
BLAKE2b-256 | 6aecae7d08ebf2bd9c0deb95a9cd96b1fac3f812788b7ade92b4bbf4ec602abb |