{"slug": "apsw", "name": "apsw", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 4, "warners": 0, "score": 3.892, "rising": 2.67, "first": "2026-07-05", "latest": "2026-10-12", "why": "Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try apsw.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 0, "compare": 0, "warn": 0}, "spark": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3], "listed": true, "loved": [], "caveat": "", "short_quote": "Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try apsw.", "icon": true, "domain": null, "github_repo": null, "official_url": "https://github.com/rogerbinns/apsw", "pricing": "", "aliases": ["apsw", "APSW"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 800997856, "item_id": 50062366, "url": "https://news.ycombinator.com/item?id=50062366", "by": "sgarland", "date": "2026-10-12", "stance": "recommend", "quote": "It\u2019s a fantastic tool, with much better defaults", "excerpt": "My only complaint with apsw is that it refuses to honor .quit to exit; sqlite3 accepts both .quit and .exit, and muscle memory keeps me using .quit for SQLite DBs. It\u2019s a fantastic tool, with much better defaults, but man that tiny thing irks me every time I use it.", "context": "", "use_case": "SQLite shell and Python wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 800821376, "item_id": 50051336, "url": "https://news.ycombinator.com/item?id=50051336", "by": "setheron", "date": "2026-10-12", "stance": "recommend", "quote": "Immediately the maintainer responded with a very thorough set of benchmarks and improvements!", "excerpt": "I remember working on https://github.com/fzakaria/sqlelf and I was curious about some performance; Immediately the maintainer responded with a very thorough set of benchmarks and improvements! The nicest part was that it turns out we lived in the same small-ish town and I didn't even know it.", "context": "", "use_case": "Python SQLite wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 800803041, "item_id": 50050190, "url": "https://news.ycombinator.com/item?id=50050190", "by": "cleifer", "date": "2026-10-12", "stance": "recommend", "quote": "Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try apsw.", "excerpt": "If you are used to stdlib but want sane transactional semantics or the ability to easily statically link your own SQLite implementation (eg to have encryption), I\u2019ve written some bindings as well: https://github.com/coleifer/cysqlite This supersedes my earlier pysqlite3 project. Perf is better than stdlib, but not as good as apsw. Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try ap", "context": "", "use_case": "Python SQLite wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 780681009, "item_id": 48792563, "url": "https://news.ycombinator.com/item?id=48792563", "by": "jph00", "date": "2026-07-05", "stance": "recommend", "quote": "IMO if you're serious about doing sqlite in python, at some point you'll probably want to check out apsw.", "excerpt": "I'm a big fan of sqlite-utils, but I really don't like how Python (particularly 3.12+) changes how sqlite's transactions work -- the native behavior explained in the sqlite docs is much better IMO. I understand why Python had to change it (to be compatible with other databases) but I don't think it's a good model for sqlite. Therefore, I created apsw-utils, a port of sqlite-utils to the amazingly-awesome apsw lib -- ", "context": "", "use_case": "SQLite in Python", "switched_from": "", "story": "sqlite-utils 4.0rc2, mostly written by Claude Fable (for about $149.25)"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["python sqlite wrapper", "sqlite shell and python wrapper", "sqlite in python"], "compared": [], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=50045273", "title": "apsw: Another Python SQLite Wrapper", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=48791708", "title": "sqlite-utils 4.0rc2, mostly written by Claude Fable (for about $149.25)", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {}, "2026-01": {}, "2026-02": {}, "2026-03": {}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {"recommend": 1}, "2026-08": {}, "2026-09": {}, "2026-10": {"recommend": 3}}, "quotes": [{"id": 800997856, "item_id": 50062366, "url": "https://news.ycombinator.com/item?id=50062366", "by": "sgarland", "date": "2026-10-12", "stance": "recommend", "quote": "It\u2019s a fantastic tool, with much better defaults", "excerpt": "My only complaint with apsw is that it refuses to honor .quit to exit; sqlite3 accepts both .quit and .exit, and muscle memory keeps me using .quit for SQLite DBs. It\u2019s a fantastic tool, with much better defaults, but man that tiny thing irks me every time I use it.", "context": "", "use_case": "SQLite shell and Python wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 800821376, "item_id": 50051336, "url": "https://news.ycombinator.com/item?id=50051336", "by": "setheron", "date": "2026-10-12", "stance": "recommend", "quote": "Immediately the maintainer responded with a very thorough set of benchmarks and improvements!", "excerpt": "I remember working on https://github.com/fzakaria/sqlelf and I was curious about some performance; Immediately the maintainer responded with a very thorough set of benchmarks and improvements! The nicest part was that it turns out we lived in the same small-ish town and I didn't even know it.", "context": "", "use_case": "Python SQLite wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 800803041, "item_id": 50050190, "url": "https://news.ycombinator.com/item?id=50050190", "by": "cleifer", "date": "2026-10-12", "stance": "recommend", "quote": "Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try apsw.", "excerpt": "If you are used to stdlib but want sane transactional semantics or the ability to easily statically link your own SQLite implementation (eg to have encryption), I\u2019ve written some bindings as well: https://github.com/coleifer/cysqlite This supersedes my earlier pysqlite3 project. Perf is better than stdlib, but not as good as apsw. Roger is doing amazing work and I urge anyone wanting to fully utilize SQLite to try ap", "context": "", "use_case": "Python SQLite wrapper", "switched_from": "", "story": "apsw: Another Python SQLite Wrapper"}, {"id": 780681009, "item_id": 48792563, "url": "https://news.ycombinator.com/item?id=48792563", "by": "jph00", "date": "2026-07-05", "stance": "recommend", "quote": "IMO if you're serious about doing sqlite in python, at some point you'll probably want to check out apsw.", "excerpt": "I'm a big fan of sqlite-utils, but I really don't like how Python (particularly 3.12+) changes how sqlite's transactions work -- the native behavior explained in the sqlite docs is much better IMO. I understand why Python had to change it (to be compatible with other databases) but I don't think it's a good model for sqlite. Therefore, I created apsw-utils, a port of sqlite-utils to the amazingly-awesome apsw lib -- ", "context": "", "use_case": "SQLite in Python", "switched_from": "", "story": "sqlite-utils 4.0rc2, mostly written by Claude Fable (for about $149.25)"}]}