From: Billy G. A. <bil...@mu...> - 2003-12-02 06:16:19
|
Adam Buraczewski wrote: >On Sat, Nov 29, 2003 at 06:13:35PM +0100, Karsten Hilbert wrote: > > >>cursor.execute('end;vacuum analyze;begin;') >>we use this successfully around "create database" >> >> > >Don't you have a feeling it's a bit ugly? ;-) DBI, and especially >cursor objects, weren't invented for DDL commands, only for DMLs. >Personally, I think that DBI spec should be somehow enhanced so that >it would cover such situations. As an acceptable solution I usually >use plain libpq module here. The goal can be achieved with following >code: > > from pyPgSQL import PgSQL > conn = PgSQL.connect(...) > ... > conn.conn.query("vacuum analyze") > >Of course it will work with pyPgSQL only :^) > >Best regards, > > > Actually, you can just set autocommit to on (per the DB-API spec it's off by default). If autocommit is on, then pyPgSQL won't wrap the query within a begin ... end block. from pyPgSQL import PgSQL conn - PgSQL.connect(...) conn.autocommit = 1 curs = conn.cursor() curs.execute("vacuum analyze") *Note: *You must set autocommit to 0 /before/ creating any cursors. Of course, using the libpq.conn.query method as suggested by Adam avoids the need to create a cursor object, but you still need to be sure that there are no open cursors for the connection when you use (opening a connection with autocommit == 0 will open a transaction at cursor creations time). |