summaryrefslogtreecommitdiff
path: root/migrate/versioning/script/sql.py
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/versioning/script/sql.py')
-rw-r--r--migrate/versioning/script/sql.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/migrate/versioning/script/sql.py b/migrate/versioning/script/sql.py
index 851fdf2..ed80764 100644
--- a/migrate/versioning/script/sql.py
+++ b/migrate/versioning/script/sql.py
@@ -1,14 +1,30 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import logging
+import shutil
from migrate.versioning.script import base
+from migrate.versioning.template import Template
+log = logging.getLogger(__name__)
+
class SqlScript(base.BaseScript):
"""A file containing plain SQL statements."""
+ @classmethod
+ def create(cls, path, **opts):
+ """Create an empty migration script at specified path
+
+ :returns: :class:`SqlScript instance <migrate.versioning.script.sql.SqlScript>`"""
+ cls.require_notfound(path)
+
+ src = Template(opts.pop('templates_path', None)).get_sql_script(theme=opts.pop('templates_theme', None))
+ shutil.copy(src, path)
+ return cls(path)
+
# TODO: why is step parameter even here?
- def run(self, engine, step=None):
+ def run(self, engine, step=None, executemany=True):
"""Runs SQL script through raw dbapi execute call"""
text = self.source()
# Don't rely on SA's autocommit here
@@ -21,7 +37,7 @@ class SqlScript(base.BaseScript):
# HACK: SQLite doesn't allow multiple statements through
# its execute() method, but it provides executescript() instead
dbapi = conn.engine.raw_connection()
- if getattr(dbapi, 'executescript', None):
+ if executemany and getattr(dbapi, 'executescript', None):
dbapi.executescript(text)
else:
conn.execute(text)