Skip to main content

An improved Python interface to SQLite

Project description

isqlite is an improved Python interface to SQLite. It has a more convenient API, support for database migrations, and a command-line interface.

WARNING: isqlite is in beta. Not all features described here have been implemented yet. If you want to try it out, back up your data first.

from isqlite import Database

with Database(":memory:") as db:
    # Create the tables defined in the database. This only needs to be done once.
    db.create_table("teams", "id INTEGER NOT NULL PRIMARY KEY", "name TEXT NOT NULL")
    db.create_table(
        "employees",
        "id INTEGER NOT NULL PRIMARY KEY",
        "name TEXT NOT NULL",
        "age INTEGER",
        "team INTEGER REFERENCES teams",
    )

    # 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
        """
    )

Features

  • A more convenient API.
    • e.g., db.create("people", {"name": "John Doe"}) instead of cursor.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.
  • Automated database migrations: adding, removing, altering and reordering columns.
  • Support for decimal.Decimal, datetime.time and bool database columns.
  • A command-line interface.

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

TODO

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isqlite-0.4.6.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

isqlite-0.4.6-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file isqlite-0.4.6.tar.gz.

File metadata

  • Download URL: isqlite-0.4.6.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.9

File hashes

Hashes for isqlite-0.4.6.tar.gz
Algorithm Hash digest
SHA256 5f051b480074b378f5f20f92fec4241b8d2abf3b883e4c2c90ba613974d9e6f6
MD5 36a5c61ebfc925a9536ff5baab1f7ca1
BLAKE2b-256 84caa8584c35585fb049fbcc4d93f65599977f8a32542207e4318adf7d88b501

See more details on using hashes here.

File details

Details for the file isqlite-0.4.6-py3-none-any.whl.

File metadata

  • Download URL: isqlite-0.4.6-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.9

File hashes

Hashes for isqlite-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 07a01d18a1f20222e7e573a9dfd0d710003830c3d5ac4bfbddc5885983b2d568
MD5 4d4e458f4aed2fec8981431df9ea0135
BLAKE2b-256 603004232e75ad9f9aa073bb0c71c8472b982e73b676b260f971f074c95dc65e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page