summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/ddl.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine/ddl.py')
-rw-r--r--lib/sqlalchemy/engine/ddl.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/sqlalchemy/engine/ddl.py b/lib/sqlalchemy/engine/ddl.py
index ef10aa5ea..74205dbb0 100644
--- a/lib/sqlalchemy/engine/ddl.py
+++ b/lib/sqlalchemy/engine/ddl.py
@@ -39,12 +39,15 @@ class SchemaGenerator(DDLBase):
listener('before-create', metadata, self.connection, tables=collection)
for table in collection:
- self.traverse_single(table)
+ self.traverse_single(table, create_ok=True)
for listener in metadata.ddl_listeners['after-create']:
listener('after-create', metadata, self.connection, tables=collection)
- def visit_table(self, table):
+ def visit_table(self, table, create_ok=False):
+ if not create_ok and not self._can_create(table):
+ return
+
for listener in table.ddl_listeners['before-create']:
listener('before-create', table, self.connection)
@@ -92,7 +95,7 @@ class SchemaDropper(DDLBase):
listener('before-drop', metadata, self.connection, tables=collection)
for table in collection:
- self.traverse_single(table)
+ self.traverse_single(table, drop_ok=True)
for listener in metadata.ddl_listeners['after-drop']:
listener('after-drop', metadata, self.connection, tables=collection)
@@ -106,7 +109,10 @@ class SchemaDropper(DDLBase):
def visit_index(self, index):
self.connection.execute(schema.DropIndex(index))
- def visit_table(self, table):
+ def visit_table(self, table, drop_ok=False):
+ if not drop_ok and not self._can_drop(table):
+ return
+
for listener in table.ddl_listeners['before-drop']:
listener('before-drop', table, self.connection)