Q2DB: Lightweight Python DB API Wrapper & ORM
Q2DB is a lightweight Python library that wraps standard DB API connectors for MySQL, PostgreSQL, and SQLite, providing a simple ORM-like interface for database operations. It enables easy schema definition and migration, supports basic CRUD operations, and offers a convenient cursor abstraction for querying and manipulating data. Q2DB is designed for rapid prototyping, small projects, and educational purposes, focusing on simplicity and minimal configuration.
Key features include:
- Unified API for MySQL, PostgreSQL, and SQLite
- Schema definition and migration (ADD COLUMN only)
- Simple ORM-like CRUD operations (insert, update, delete, get)
- Foreign key checks and logging of changes
- Cursor abstraction for flexible queries and record navigation
- Docker support for quick setup and testing
Features:
Connect
from q2db.db import Q2Db
database_sqlite = Q2Db("sqlite3", database_name=":memory:")
# or just
database_sqlite = Q2Db()
database_mysql = Q2Db(
"mysql",
user="root",
password="q2test"
host="0.0.0.0",
port="3308",
database_name="q2test",
)
# or just
database_mysql = Q2Db(url="mysql://root:q2test@0.0.0.0:3308/q2test")
database_postgresql = Q2Db(
"postgresql",
user="q2user",
password="q2test"
host="0.0.0.0",
port=5432,
database_name="q2test1",
)
Define & migrate database schema (ADD COLUMN only).
q2db.schema import Q2DbSchema
schema = Q2DbSchema()
schema.add(table="topic_table", column="uid", datatype="int", datalen=9, pk=True)
schema.add(table="topic_table", column="name", datatype="varchar", datalen=100)
schema.add(table="message_table", column="uid", datatype="int", datalen=9, pk=True)
schema.add(table="message_table", column="message", datatype="varchar", datalen=100)
schema.add(
table="message_table",
column="parent_uid",
to_table="topic_table",
to_column="uid",
related="name"
)
database.set_schema(schema)
INSERT, UPDATE, DELETE
database.insert("topic_table", {"name": "topic 0"})
database.insert("topic_table", {"name": "topic 1"})
database.insert("topic_table", {"name": "topic 2"})
database.insert("topic_table", {"name": "topic 3"})
database.insert("message_table", {"message": "Message 0 in 0", "parent_uid": 0})
database.insert("message_table", {"message": "Message 1 in 0", "parent_uid": 0})
database.insert("message_table", {"message": "Message 0 in 1", "parent_uid": 1})
database.insert("message_table", {"message": "Message 1 in 1", "parent_uid": 1})
# this returns False because there is no value 2 in topic_table.id - schema works!
database.insert("message_table", {"message": "Message 1 in 1", "parent_uid": 2})
database.delete("message_table", {"uid": 2})
database.update("message_table", {"uid": 0, "message": "updated message"})
Cursor
cursor = database.cursor(table_name="topic_table")
cursor = database.cursor(
table_name="topic_table",
where=" name like '%2%'",
order="name desc"
)
cursor.insert({"name": "insert record via cursor"})
cursor.delete({"uid": 2})
cursor.update({"uid": 0, "message": "updated message"})
cursor = database.cursor(sql="select name from topic_table")
for x in cursor.records():
print(x)
print(cursor.r.name)
cursor.record(0)['name']
cursor.row_count()
cursor.first()
cursor.last()
cursor.next()
cursor.prev()
cursor.bof()
cursor.eof()
Metadata
Release files for q2db 0.1.71
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| q2db-0.1.71.tar.gz | 24.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| q2db-0.1.71-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.5 kB
Release files / q2db-0.1.71.tar.gz
| Download URL | q2db-0.1.71.tar.gz |
|---|---|
| Size | 24.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1d6a5387eb9eb256b9db178f39210b44bba0fe9f8e725d2e18615d983884a36
|
|
BLAKE2b-256 checksum How to use checksums |
d7b311fd14d439aee3a36fb14fb3a1c410c21ad3024ad19106c489b027159a9d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.0 CPython/3.11.7 Windows/10
|
Release files / q2db-0.1.71-py3-none-any.whl
| Download URL | q2db-0.1.71-py3-none-any.whl |
|---|---|
| Size | 26.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
930f8d2ff121c4e3386bdf37db07b2c1ba0e87317812b4c396fbc880697ba708
|
|
BLAKE2b-256 checksum How to use checksums |
7f9ecdccd2b2f6aa7cd78a67e8c5a07f82bd0fe732bf6143a5730d84315935a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.0 CPython/3.11.7 Windows/10
|