coolqlite¶
A Semi-Opinionated, Simple But Featureful, Low-Dependency, Sqlite Python Library that:
Builds queries with 3.14 template strings (it’s safe I promise)
Makes converting to/from python and sql datatypes easy
(Including cattrs integration!)Encourages good practices & has reasonable defaults:
Temporal handling is built around datetype.
Everything has type annotations.
The defaults are tuned for a nice sqlite experience.
It is meant to feel similar to the standard library’s sqlite module, but with a smoother, more modern UX.
>>> from dataclasses import dataclass
>>> from datetime import datetime
>>> import zoneinfo
>>> from coolqlite import connect
>>> from datetype import AwareDateTime
>>>
>>> @dataclass
... class Student:
... name: str
... teacher: str
... graduated: AwareDateTime
...
>>> db = connect(":memory:")
>>>
>>> with db.with_savepoint():
... db.run(t"""create table Students
... ( name TEXT NOT NULL
... , teacher TEXT NOT NULL
... , graduated TEXT NOT NULL
... ) strict""")
... for name, teach, when in (
... ("Caleb", "Liam", datetime(2018, 5, 10)),
... ("Nott", "Sam", datetime(2020, 2, 27)),
... ("FCG", "Sam", datetime(2024, 4, 11)),
... ):
... when = when.replace(tzinfo=zoneinfo.ZoneInfo("America/Los_Angeles"))
... db.run(t"insert into Students values ({name}, {teach}, {when:keeptz})")
...
>>> def students_for_teacher(teach: str):
... print(f"Students for {teach}:")
... for student in db.query(
... t"select * from Students where teacher = {teach}", Student
... ):
... print(f"{student.name} graduated {student.graduated.isoformat(' ')}")
... print()
...
>>> students_for_teacher("Sam")
Students for Sam:
Nott graduated 2020-02-27 00:00:00-08:00
FCG graduated 2024-04-11 00:00:00-07:00
>>> # No injection here!
>>> students_for_teacher("'' or TRUE; --")
Students for '' or TRUE; --:
Warranty¶
None is offered, express or implied. Back up your data.