OK, that’s good, but it does mean that your construct isn’t doing the “autocommit” part correctly, because engine.execute(..) should work. The docs for doing that are at: http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html#enabling-autocommit-on-a-construct.
Mike Richards <justanotherb...@gmail.com> wrote: > The suggested change from > > engine.execute(create_view_command) > > to > > with engine.begin() as connection: > connection.execute(create_view_command) > > works. Thank you much, and have a nice day Michael! > > On Tuesday, February 10, 2015 at 4:47:37 PM UTC-8, Michael Bayer wrote: > > > Mike Richards <justano...@gmail.com> wrote: > > > When attempting to create a SQL Server view the method located on > > StackOverflow does not work. Am I missing something? > > > > I've tried enabling autocommit in _execution_options to no avail. Beyond > > that I'm unsure what to try next. > > > > Thank you very much for your time and help, > > you should look at your SQL output. If the DDL emitted is correct, then it > is just a matter of it being committed. > > If you try running like this: > > with engine.begin() as connection: > connection.execute(cmd) > > you should see CREATE VIEW in your SQL output as well as a COMMIT following > it. > > > > > > Mike Richards > > > > Details: > > sqlalchemy: 0.9.8 > > python: 2.7.6 > > pyodbc: 3.0.6 > > MS SQL Server Enterprise 2014 64 bit > > > > Code: > > > > from sqlalchemy.ext.compiler import compiles > > from sqlalchemy.sql.expression import ClauseElement > > from sqlalchemy.sql.expression import Executable > > > > from print_counts.orm import mssql_engine as engine > > from print_counts.orm import get_session > > from print_counts.queries import monthly_print_counts > > > > > > class CreateView(Executable, ClauseElement): > > """ > > Copied from stackoverflow site. > > > > Seems to match docs at > > http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html > > """ > > def __init__(self, name, select): > > self.name = name > > self.select = select > > > > > > @compiles(CreateView) > > def visit_create_view(element, compiler, **kwargs): > > """ > > Copied from stackoverflow site. > > > > Seems to match docs at > > http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html > > """ > > result = "CREATE VIEW %s AS %s" % ( > > element.name, > > compiler.process(element.select, literal_binds=True) > > ) > > return result > > > > > > def CreateView_to_SQL(createview, engine): > > "Workaround hack." > > select_sql = createview.select.compile(bind=engine) > > return "CREATE VIEW %s AS %s" % (createview.name, select_sql) > > > > > > if __name__ == '__main__': > > name = 'dbo.monthly_print_counts' > > # returns a query created via session.query; Happy to supply code for > > this > > # Query created with four declarative ORM models, and includes several > > subqueries. > > # all related tables are in the same database the view would be created > > in. > > query = monthly_print_counts(get_session()) > > create_view_command = CreateView(name, query.selectable) > > > > # this is the statement I'd like help with making work > > # it executes visit_create_view, but does not actually create the table > > # No errors or debug messages are printed > > engine.execute(create_view_command) > > > > # the current workaround. Creates the view, which behaves as expected > > sql = CreateView_to_SQL(create_view_command, engine) > > engine.execute(sql) > > > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sqlalchemy+...@googlegroups.com. > > To post to this group, send email to sqlal...@googlegroups.com. > > Visit this group at http://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.