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.

Reply via email to