diff options
Diffstat (limited to 'migrate/versioning/script/sql.py')
| -rw-r--r-- | migrate/versioning/script/sql.py | 20 |
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) |
