Crear una base de datos Postgres usando python

Quiero crear la base de datos Postgres usando Python.

con = psql.connect(dbname='postgres', user=self.user_name, host='', password=self.password) cur = con.cursor() cur.execute("CREATE DATABASE %s ;" % self.db_name) 

Estoy teniendo el siguiente error:

 InternalError: CREATE DATABASE cannot run inside a transaction block 

Estoy usando psycopg2 para conectar. No entiendo cuál es el problema. Lo que estoy tratando de hacer es conectarme a la base de datos (Postgres):

 psql -postgres -U UserName 

Y luego crear otra base de datos:

 create database test; 

Esto es lo que normalmente hago y quiero automatizar esto creando el script Python.

Use ISOLATION_LEVEL_AUTOCOMMIT , una extensión de psycopg2:

No se inicia ninguna transacción cuando se emiten los comandos y no se requiere commit () o rollback ().

 import psycopg2 from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT # <-- ADD THIS LINE con = psycopg2.connect(dbname='postgres', user=self.user_name, host='', password=self.password) con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # <-- ADD THIS LINE cur = con.cursor() cur.execute("CREATE DATABASE %s ;" % self.db_name) 

Como se muestra en la otra respuesta, la conexión debe estar en modo de confirmación automática. Otra forma de configurarlo usando psycopg2 es a través del atributo autocommit :

 import psycopg2 con = psycopg2.connect(...) con.autocommit = True cur = con.cursor() cur.execute('CREATE DATABASE {};'.format(self.db_name))