Simplify drop-foreign-key, and drop_foreign_keys, closes #177

This commit is contained in:
Simon Willison 2020-09-24 09:19:07 -07:00
commit 5a63b9e88c
6 changed files with 6 additions and 18 deletions

View file

@ -592,7 +592,7 @@ Every option for this table (with the exception of ``--pk-none``) can be specifi
``--default-none column``
Remove the default value for this column.
``--drop-foreign-key col other_table other_column``
``--drop-foreign-key column``
Drop the specified foreign key.
If you want to see the SQL that will be executed to make the change without actually executing it, add the ``--sql`` flag. For example::

View file

@ -995,17 +995,14 @@ The ``column_order=`` parameter can be used to change the order of the columns.
# Change column order
table.transform(column_order=("name", "age", "id")
You can use ``.transform()`` to remove foreign key constraints from a table. You will need to know the name of the column, the name of the table it points to and the name of the column it references on that other table.
You can use ``.transform()`` to remove foreign key constraints from a table.
This example drops two foreign keys - the one from ``places.country`` to ``country.id`` and the one from ``places.continent`` to ``continent.id``:
.. code-block:: python
db["places"].transform(
drop_foreign_keys=(
("country", "country", "id"),
("continent", "continent", "id"),
)
drop_foreign_keys=("country", "continent")
)
.. _python_api_transform_sql:

View file

@ -924,7 +924,7 @@ def rows(ctx, path, dbtable, nl, arrays, csv, no_headers, table, fmt, json_cols)
)
@click.option(
"--drop-foreign-key",
type=(str, str, str),
type=str,
multiple=True,
help="Drop this foreign key constraint",
)

View file

@ -835,9 +835,7 @@ class Table(Queryable):
# foreign_keys
create_table_foreign_keys = []
for table, column, other_table, other_column in self.foreign_keys:
if (drop_foreign_keys is None) or (
(column, other_table, other_column) not in drop_foreign_keys
):
if (drop_foreign_keys is None) or (column not in drop_foreign_keys):
create_table_foreign_keys.append(
(rename.get(column) or column, other_table, other_column)
)

View file

@ -1542,8 +1542,6 @@ def test_transform_drop_foreign_key(db_path):
"places",
"--drop-foreign-key",
"country",
"country",
"id",
],
)
print(result.output)

View file

@ -274,12 +274,7 @@ def test_transform_drop_foreign_keys(fresh_db, use_pragma_foreign_keys):
),
]
# Drop two of those foreign keys
fresh_db["places"].transform(
drop_foreign_keys=(
("country", "country", "id"),
("continent", "continent", "id"),
)
)
fresh_db["places"].transform(drop_foreign_keys=("country", "continent"))
# Should be only one foreign key now
assert fresh_db["places"].foreign_keys == [
ForeignKey(table="places", column="city", other_table="city", other_column="id")