Simon Willison
8e015d024c
Compound primary keys now resolve in PRIMARY KEY declaration order
...
PRAGMA table_info sets is_pk to the 1-based position of each column
within the PRIMARY KEY, which can differ from table column order.
table.pks previously returned table column order, so an implicit
compound FOREIGN KEY ... REFERENCES other was introspected with its
referenced columns inverted, and transform() baked that inverted order
into the rewritten schema - failing with IntegrityError on valid data,
or silently reversing the constraint with foreign keys off.
table.pks, compound foreign key guessing (create, add_foreign_key) and
transform() now all use declaration order, and transform() no longer
reorders a compound PRIMARY KEY (b, a) into table column order.
Refs https://github.com/simonw/sqlite-utils/issues/769#issuecomment-4900034150
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:34:02 -07:00
Simon Willison
8f0c06e188
Test against Python 3.15-dev, bump ty and Black ( #738 )
...
* Add Python 3.15-dev to test matrix
* Run ty check only on 3.14
* Bump Black version
* Update tabulate and use that in
* Bump to latest ty
2026-05-17 16:52:48 -07:00
Simon Willison
fd5b09f64b
Database as a context manager, fixed many pytest warnings
...
* Database can now work as a context manager
* Claude Code helped fix a ton of .close() warnings
https://gistpreview.github.io/?730f0c5dc38528a1dd0615f330bd5481
* New autouse fixture to help with test warnings
Refs https://github.com/simonw/sqlite-utils/issues/692#issuecomment-3644371889
* Fix all remaining resource warnings
https://gistpreview.github.io/?0bb8e869b82f6ff0db647de755182502
Closes #692
2025-12-11 16:56:12 -08:00
Simon Willison
fb93452ea8
Use double quotes not braces for tables and columns ( #678 )
...
Closes #677
2025-11-23 20:43:26 -08:00
Simon Willison
d2bcdc00c6
Swapped the order of a bunch of pytest comparisons
...
When I wrote this I thought constant == value was a better assertion. I no longer think that.
2023-08-17 18:05:13 -07:00
Simon Willison
36ffcafb1a
table.default_values property, closes #475
...
Refs #468
2022-08-27 15:42:58 -07:00
Simon Willison
b8af3b96f5
Fix bug with detect_fts() and similar table names, closes #434
2022-06-14 16:24:06 -07:00
Simon Willison
e3f108e0f3
db.supports_strict and table.strict properties, refs #344
2021-11-29 14:19:30 -08:00
Simon Willison
4823aff4c3
table.count_where() method, closes #305
2021-08-01 22:08:17 -07:00
Simon Willison
90e211e3e2
Now complies with flake8, refs #291
2021-06-22 18:22:08 -07:00
Simon Willison
5b257949d9
table.use_rowid introspection property, closes #285
2021-06-19 08:12:29 -07:00
Simon Willison
0d2e4f49f3
db.schema and 'sqlite-utils schema' command, closes #268
2021-06-11 13:51:49 -07:00
Simon Willison
9c67cb9252
table.xindexes property plus improved introspection documentation, closes #261
2021-06-02 20:51:27 -07:00
Simon Willison
b4f09146d3
table.has_counts_triggers property, refs #219
2021-01-03 12:41:24 -08:00
Simon Willison
de08096989
database.triggers_dict, closes #216
2021-01-02 20:19:55 -08:00
Simon Willison
b067f1ff57
table.triggers_dict property, closes #211
2021-01-01 18:10:04 -08:00
Simon Willison
59d8689ed0
table.virtual_table_using property, closes #196
2020-11-04 19:53:45 -08:00
Simon Willison
cf2cb244fa
Tracer mechanism for showing underlying SQL queries
...
* Pass a tracer= function to Database constructor
* New db.tracer() contextmanager
* Neater SQL indentation, because tracer means it could be visible now
* New db.execute() and db.executescript() methods
Closes #150
2020-09-07 14:56:59 -07:00
Simon Willison
fc38868bd4
Refactored tests into new test_rows.py, refs #76
2020-04-15 18:04:55 -07:00
Simon Willison
2ca63e3b2d
db.triggers and table.triggers introspection ( #60 )
...
Closes #59
2019-09-02 17:09:41 -07:00
Simon Willison
9faa982226
Ability to introspect and run queries against views ( #55 )
...
* db.views_names() method and and db.views property
* Separate View and Table classes, both subclassing new Queryable class
* view.drop() method
* Updated documentation
2019-08-23 15:19:41 +03:00
Simon Willison
e4a11b1815
Refactor .update() to use .get()
...
.pks introspection now returns [rowid] for rowid tables.
2019-07-28 15:44:33 +03:00
Simon Willison
58db40d67c
Better __repr__ for tables
2019-07-22 17:05:51 -07:00
Simon Willison
d645032cfa
add_foreign_key can now detect table and pk, refs #25
2019-06-12 21:51:09 -07:00
Simon Willison
3095f2e671
Added db[table].rows iterator
2019-02-21 21:29:50 -08:00
Simon Willison
0a8194e730
sqlite-utils optimize command, .optimize() and .detect_fts() table methods
2019-01-24 20:35:51 -08:00
Simon Willison
015bd2a840
Test for .table_names(fts5=True)
2019-01-24 20:23:53 -08:00
Simon Willison
66fd63b119
Ability to list just FTS4 or FTS5 table names
2019-01-24 19:57:04 -08:00
Simon Willison
fcc38b9ff2
Moved fixtures into conftest.py
2018-08-12 17:25:39 -07:00
Simon Willison
c611ed80d2
.indexes property for introspecting indexes
2018-07-31 18:31:29 -07:00
Simon Willison
515d362ad6
.table_names and .tables properties plus expanded docs
2018-07-31 17:35:36 -07:00
Simon Willison
c446e22f34
Moved fixtures to fixtures.py, added .schema test
2018-07-31 08:55:24 -07:00
Simon Willison
5deb65f062
Now you just 'from sqlite_utils import Database'
...
Plus fixed ad_id in the Russian ads example in the docs
2018-07-30 20:30:23 -07:00
Simon Willison
b69f8b6c85
table.count property, plus made a start on table documentation
2018-07-30 20:24:35 -07:00