Hi, the pg8000 driver has an autocommit mode, activated using the boolean 
'autocommit' attribute of the DBAPI connection. For example:

import pg8000conn = pg8000.connect(user="postgres", password="C.P.Snow")
conn.autocommit = Truecur = conn.cursor()cur.execute("CREATE DATABASE 
qux")conn.autocommit = Falsecursor.close()conn.close()

I'm not sure if the SQLAlchemy driver for pg8000 supports using:

conn.execution_options(“AUTOCOMMIT”)

I'll investigate...

Cheers,

Tony.



On Wednesday, 7 May 2014 01:08:00 UTC+1, Michael Bayer wrote:
>
>
> On May 6, 2014, at 6:09 PM, Michael Costello 
> <[email protected]<javascript:>> 
> wrote:
>
> Hello.
>
> Setup:
>   python 2.7.6
>   postgres 9.3.4
>   sqlalchemy 0.9.4 (also, 0.8.4)
>   pg8000 1.9.8
>
> I am attempting to create a database using sqlalchemy with the above tools 
> and the following code:
>
> from sqlalchemy import create_engine
>
> dburl = "postgresql+pg8000://user:[email protected]:5432/postgres"
>
> engine = create_engine(dburl)
>
> conn = engine.connect()
> conn.execute("COMMIT")
> conn.execute("CREATE DATABASE qux")
> conn.close()
>
> but I receive the following error:
>
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('ERROR', '25001', 
> 'CREATE DATABASE cannot run inside a transaction block') 'CREATE DATABASE 
> qux' ()
>
> However, running the same code against the same database but using 
> sqlalchemy version 0.8.0 works.
>
> Is there something I can do to get 0.9.4 to work for me?
>
>
>
> I can’t imagine why that would work differently on 0.8.0 because the 
> transactional behavior is the same on the SQLAlchemy side.      
>
> Running this test with the latest pg8000 1.9.8:
>
> from sqlalchemy import create_engine
>
> e = create_engine("postgresql+pg8000://scott:tiger@localhost/test", 
> echo=True)
> conn = e.connect()
> conn.execute("COMMIT")
> conn.execute("create database foo")
>
> output on 0.9.4:
>
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('ERROR', '25001', 
> 'CREATE DATABASE cannot run inside a transaction block') 'create database 
> foo' ()
>
> output on 0.8.0:
>
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('ERROR', '25001', 
> 'CREATE DATABASE cannot run inside a transaction block') 'create database 
> foo' ()
>
> output on 0.8.4:
>
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('ERROR', '25001', 
> 'CREATE DATABASE cannot run inside a transaction block') 'create database 
> foo' ()
>
>
> etc.
>
> so i think perhaps your pg8000 version has changed.
>
> To achieve this you should use psycopg2 and use psycopg2’s “autocommit” 
> mode.  See 
> http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#postgresql-isolation-leveland
>  
> http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#psycopg2-transaction-isolation-level;
>  
> with psycopg2 you can use 
> conn.execution_options(“AUTOCOMMIT”).execute(“CREATE DATABASE qux”).
>
>
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to