Python embebbed with Oracle SQL*Plus
Zen
zen at shangri-la.dropbear.id.au
Thu Jun 28 19:13:36 EDT 2001
olavb at yahoo.com (Olav) writes:
>This is a very simple Cygwin/NT example:
>***************
>PLUS33 scott/tiger at prod_sa <<EOF
>select COU_NAME from M1_countries
>/
>quit
>eof
>********************
>So it is not simply building an SQL-string and calling
>some function.
This method can be done using the popen2 module to open pipes to
a SQL*Plus process (or os.popen if you don't need to parse the output).
>It is really like SQL embedded in the script.
>There are also mechanism for passing variables back and forth.
>(I can easily write a script that takes a sql-statement as an arguments
>from the command line, something like osql select "*" from M1_countries)
If you havn't looked at the DB API documentation I suggeset you do so
(http://www.python.org/topics/database/DatabaseAPI-2.0.html). It is much
nicer to work in this interface rather than deal with piping things
too and from sqlplus.
>I guess the mechanism is to build a temporary file, and call sqlplus
>with this.
>I think it might be more difficult with Python because it is actually
>precompiled and because there is no equivalent of pipes.
import popen2
(to_sqlplus,from_sqlplus) = popen2.popen2('PLUS33.EXE scott/tiger at prod_sa')
print >> to_sqlplus,'''
set pagesize 0
select COU_NAME from M1_countries where COU_NAME = '%s';
exit;
''' % ('Austria')
for l in from_sqlplus.readlines():
print l,
The equivalent using the DB API
import DCOracle
try:
connection = DCOracle.Connect('scott/tiger at prod_sa')
cursor = connection.cursor()
cursor.execute('select COU_NAME from M1_countries where COU_NAME = :p1',
['Austria'])
for row in cursor.fetchall():
print row[0]
except DCOracle.error:
print 'Argh!'
More information about the Python-list
mailing list