On Sat, Oct 10, 2009 at 4:14 PM, Adrian Klaver <akla...@comcast.net> wrote:

> On Saturday 10 October 2009 12:27:39 pm Adrian Klaver wrote:
> > On Saturday 10 October 2009 12:09:29 pm Kynn Jones wrote:
> > > I am porting some code from Perl to Python; in the Perl original I use
> > > either DBI::do or a rickety home-built module to pass multiple SQL
> > > statements (as one single block of SQL) to the Pg server.  The typical
> > > usage is something like this:
> > > $dbh->do( <<EOSQL );
> > > ALTER TABLE $xn OWNER TO xdev;
> > > GRANT ALL ON TABLE $xn TO xdev;
> > >
> > > REVOKE ALL ON TABLE $xn FROM PUBLIC;
> > > GRANT SELECT ON TABLE $xn TO PUBLIC;
> > > EOSQL
> > >
> > >
> > > How can I do this sort of thing from Python?
> > >
> > > I've looked into the docs for psycopg2, but I can't find anything like
> > > the do command used above.  Did I overlook it?  If not, what can I use
> > > instead?
> > >
> > > I'm not wedded to psycopg2, in fact its lack of documentation worries
> me;
> > > if there's a better alternative that I can use from Python please let
> me
> > > know.
> > >
> > > TIA!
> > >
> > > kynn
> >
> > One way
> > Using psycopg2
> > DSN = "dbname=? user=? port=? host=?"
> > con = psycopg2.connection(DSN)
> > cur = con.cursor()
> > cur.execute(statement1)
> > cur.execute(statement2)
> > ....
> > con.commit()
> >
> > Another way, not tested, is triple quote entire block above and pass it
> to
> > cur.execute.
> >
> > --
> > Adrian Klaver
> > akla...@comcast.net
>
> I missed the part where you wanted to do it as one block with variables
> already
> substituted.
>
> For that I usually do something like:
>
> sql_str = "ALTER TABLE " + $xn + " OWNER TO xdev;"
> sql_str += "GRANT ALL ON TABLE " + $xn + " TO xdev;"
> sql_str += "REVOKE ALL ON TABLE " + $xn + " FROM PUBLIC;"
> sql_str += "GRANT SELECT ON TABLE " + $xn + " TO PUBLIC;"
>
> cur.execute(sql_str)
>

Many thanks!


> On a side note the Psycopg mailing list is:
> http://lists.initd.org/mailman/listinfo/psycopg
>
> It is very helpful and makes up for the documentation issues.


That's good to know.  Thanks again.

kynn

Reply via email to