3.35
Adding foreign keys to a table no longer uses PRAGMA writable_schema = 1
to directly manipulate the sqlite_master
table. This was resulting in errors in some Python installations where the SQLite library was compiled in a way that prevented this from working, in particular on macOS. Foreign keys are now added using the table transformation mechanism instead. (#577)
This new mechanism creates a full copy of the table, so it is likely to be significantly slower for large tables, but will no longer trigger table sqlite_master may not be modified
errors on platforms that do not support PRAGMA writable_schema = 1
.
A new plugin, sqlite-utils-fast-fks, is now available for developers who still want to use that faster but riskier implementation.
Other changes:
- The table.transform() method has two new parameters:
foreign_keys=
allows you to replace the foreign key constraints defined on a table, andadd_foreign_keys=
lets you specify new foreign keys to add. These complement the existingdrop_foreign_keys=
parameter. (#577) - The sqlite-utils transform command has a new
--add-foreign-key
option which can be called multiple times to add foreign keys to a table that is being transformed. (#585) - sqlite-utils convert now has a
--pdb
option for opening a debugger on the first encountered error in your conversion script. (#581) - Fixed a bug where
sqlite-utils install -e '.[test]'
option did not work correctly.