Mercurial > sqlpython
diff sqlpython/sqlpython.py @ 317:f200a222a936
beginning to set up metadata.py
author | Catherine Devlin <catherine.devlin@gmail.com> |
---|---|
date | Tue, 31 Mar 2009 12:03:49 -0400 |
parents | a0a36232983a |
children | 3c58df9bcf14 |
line wrap: on
line diff
--- a/sqlpython/sqlpython.py Tue Mar 31 09:21:09 2009 -0400 +++ b/sqlpython/sqlpython.py Tue Mar 31 12:03:49 2009 -0400 @@ -1,5 +1,5 @@ # -# SqlPython V1.6.3 +# SqlPython V1.7.0 # Author: Luca.Canali@cern.ch, Apr 2006 # Rev 30-Mar-09 # @@ -10,7 +10,7 @@ import cmd2,getpass,binascii,cx_Oracle,re,os import sqlpyPlus, sqlalchemy -__version__ = '1.6.3' +__version__ = '1.7.0' class sqlpython(cmd2.Cmd): '''A python module to reproduce Oracle's command line with focus on customization and extention''' @@ -30,17 +30,21 @@ self.conn = None self.connection_number = None + def make_connection_current(self, connection_number): + self.conn = self.connections[connection_number]['conn'] + self.prompt = self.connections[connection_number]['prompt'] + self.rdbms = self.connections[connection_number]['rdbms'] + self.connection_number = connection_number + self.curs = self.conn.cursor() + def successful_connection_to_number(self, arg): try: connection_number = int(arg) - self.conn = self.connections[connection_number]['conn'] - self.prompt = self.connections[connection_number]['prompt'] - self.connection_number = connection_number - self.curs = self.conn.cursor() - if self.orcl and self.serveroutput: - self.curs.callproc('dbms_output.enable', []) except ValueError: return False + self.make_connection_current(connection_number) + if (self.rdbms == 'oracle') and self.serveroutput: + self.curs.callproc('dbms_output.enable', []) return True def list_connections(self): @@ -67,8 +71,8 @@ self.curs = None self.no_connection() - def url_connect(self, arg): - eng = sqlalchemy.create_engine(arg) + def url_connect(self, arg, mode=0): + eng = sqlalchemy.create_engine(arg) #create_engine refuses "mode" argument self.conn = eng.connect().connection conn = {'conn': self.conn, 'prompt': self.prompt, 'dbname': eng.url.database, 'rdbms': eng.url.drivername, 'user': eng.url.username or '', @@ -109,7 +113,9 @@ print 'Privilege not specified for SYS, assuming SYSOPER' modeval = cx_Oracle.SYSOPER if modeval == 0: # can sqlalchemy connect as sysoper, sysdba? - return self.url_connect('oracle://%s:%s@%s' % (orauser, orapass, oraserv)) + result = self.url_connect('oracle://%s:%s@%s' % (orauser, orapass, oraserv), mode=modeval) + result['dbname'] = oraserv + return result else: self.conn = cx_Oracle.connect(orauser,orapass,oraserv,modeval) result = {'user': orauser, 'rdbms': 'oracle', 'dbname': sid, 'conn': self.conn} @@ -151,13 +157,11 @@ self.connection_number = max(self.connections.keys()) + 1 except ValueError: self.connection_number = 0 + connect_info['prompt'] = '%d:%s@%s> ' % (self.connection_number, connect_info['user'], connect_info['dbname']) self.connections[self.connection_number] = connect_info + self.make_connection_current(self.connection_number) self.curs = self.conn.cursor() - self.orcl = connect_info['rdbms'] == 'oracle' - self.prompt = '%d:%s@%s> ' % (self.connection_number, - connect_info['user'], connect_info['dbname']) - self.connections[self.connection_number]['prompt'] = self.prompt - if self.orcl and self.serveroutput: + if (self.rdbms == 'oracle') and self.serveroutput: self.curs.callproc('dbms_output.enable', []) def postparsing_precmd(self, statement): stop = 0 @@ -252,11 +256,11 @@ command = '%s %s;' else: command = '%s %s' - if self.orcl: + if self.rdbms == 'oracle': current_time = self.current_database_time() self.curs.execute(command % (arg.parsed.command, arg.parsed.args), self.varsUsed) executionmessage = '\nExecuted%s\n' % ((self.curs.rowcount > 0) and ' (%d rows)' % self.curs.rowcount or '') - if self.orcl: + if self.rdbms == 'oracle': self._show_errors(all_users=True, limit=1, mintime=current_time) print executionmessage