summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/ddl.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/ddl.py')
-rw-r--r--lib/sqlalchemy/sql/ddl.py22
1 files changed, 17 insertions, 5 deletions
diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py
index a166a6bdf..8d8e68d2f 100644
--- a/lib/sqlalchemy/sql/ddl.py
+++ b/lib/sqlalchemy/sql/ddl.py
@@ -1002,7 +1002,7 @@ class SchemaDropper(DDLBase):
seq_coll = [
s
for s in metadata._sequences.values()
- if s.column is None and self._can_drop_sequence(s)
+ if self._can_drop_sequence(s)
]
event_collection = [t for (t, fks) in collection if t is not None]
@@ -1018,14 +1018,17 @@ class SchemaDropper(DDLBase):
for table, fkcs in collection:
if table is not None:
self.traverse_single(
- table, drop_ok=True, _is_metadata_operation=True
+ table,
+ drop_ok=True,
+ _is_metadata_operation=True,
+ _ignore_sequences=seq_coll,
)
else:
for fkc in fkcs:
self.traverse_single(fkc)
for seq in seq_coll:
- self.traverse_single(seq, drop_ok=True)
+ self.traverse_single(seq, drop_ok=seq.column is None)
metadata.dispatch.after_drop(
metadata,
@@ -1073,7 +1076,13 @@ class SchemaDropper(DDLBase):
self.connection.execute(DropIndex(index))
- def visit_table(self, table, drop_ok=False, _is_metadata_operation=False):
+ def visit_table(
+ self,
+ table,
+ drop_ok=False,
+ _is_metadata_operation=False,
+ _ignore_sequences=[],
+ ):
if not drop_ok and not self._can_drop_table(table):
return
@@ -1093,7 +1102,10 @@ class SchemaDropper(DDLBase):
# latest/core/defaults.html#associating-a-sequence-as-the-server-side-
# default), so have to be dropped after the table is dropped.
for column in table.columns:
- if column.default is not None:
+ if (
+ column.default is not None
+ and column.default not in _ignore_sequences
+ ):
self.traverse_single(column.default)
table.dispatch.after_drop(