diff --git a/sql.py b/sql.py index a3e962d..54fe907 100755 --- a/sql.py +++ b/sql.py @@ -1,17 +1,13 @@ -#!/usr/bin/env python2.4 -import cx_Oracle -import sys -import os -import traceback -try: - import readline -except ImportError: - pass +#!/usr/bin/python3 + +import os +import sys +import sqlalchemy +import readline +import traceback + + -if len(sys.argv) < 2: - connstr = raw_input('Connect string: ') -else: - connstr = sys.argv[1] def softpad(s, l, padchar = " "): padding = padchar * l @@ -24,7 +20,7 @@ def pad(s, l, padchar = " "): rowbuffer = None def print_row(): - global rowbuffer + global rowbuffer, cur, db if not cur or not cur.description: return False try: @@ -41,8 +37,8 @@ def print_row(): for i in range(len(rowbuffer)): l = len(rowbuffer[i]) if i > len(lens): - print lens - print rowbuffer + print(lens) + print(rowbuffer) if l > lens[i]: lens[i] = l rowbuffer = None @@ -65,34 +61,54 @@ def print_row(): cols = allcols[i] for j in range(len(cols)): cols[j] = pad(cols[j], lens[j]) - + colhdrrow = ' | '.join(colhdrs) seprow = '-' * len(colhdrrow) - print colhdrrow - print seprow + print(colhdrrow) + print(seprow) for cols in allcols: colsrow = ' | '.join(cols) - print colsrow - + print(colsrow) + rowbuffer = cur.fetchone() if rowbuffer: - print " ( more ) " + print(" ( more ) ") return True except: traceback.print_exc() return False -db = cx_Oracle.connect(connstr) -cur = db.cursor() + opts = { 'page': '20', 'hide_null_tablespace': '1', 'hide_tablespaces': 'SYSTEM;SYSAUX;SDE;SPATIAL_DATA' } +connstr = "" +if len(sys.argv) < 2: + if os.path.exists('settings.ini'): + try: + from cecil.core import inifile + config = inifile.inifile('settings.ini') + connstr = config['settings']['db'] + except: + pass + + if not connstr: + connstr = input('Connect string: ') +else: + connstr = sys.argv[1] + +e = sqlalchemy.create_engine(connstr) +pool = e.connect() +db = pool.connection +cur = db.cursor() +c2 = db.cursor() + do_quit = False while True: try: - v = raw_input('# ') + v = input('# ') except EOFError: do_quit = True @@ -100,7 +116,7 @@ while True: break v = v.strip() vl = v.lower() - + if vl == 'quit' or vl == 'exit': break elif vl == 'commit': @@ -109,20 +125,8 @@ while True: db.rollback() elif vl == 'tables': rowbuffer = None - conds = ["tablespace_name != '%s'" % (x,) for x in opts['hide_tablespaces'].split(';')] - if opts['hide_null_tablespace'][0:1] in ('1', 'Y', 'y', 'T', 't'): - conds += ['tablespace_name is not null'] - conds = ' and '.join(conds) - if conds: - conds = ' where ' + conds - cur.execute("select table_name, tablespace_name from all_tables %s" % (conds,)) + cur.execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES") print_row() - elif vl[:5] == 'exec ': - cmd = v[5:] - try: - exec cmd - except: - traceback.print_exc() elif vl[:5] == 'cols ': rowbuffer = None vs = v.split(' ') @@ -130,9 +134,10 @@ while True: try: c2.execute("select * from %s where 1 is null" % (vs[1],)) for coldata in c2.description: - print "%s%s" % (softpad(coldata[0], 40), coldata[1]) - except cx_Oracle.DatabaseError, e: - sys.stdout.write(str(e)) + print("%s%s" % (softpad(coldata[0], 40), coldata[1])) + except: + traceback.print_exc() + sys.stdout.write('\n') elif vl[:4] == 'set ': vs = v[4:] vi = vs.find('=') @@ -142,31 +147,27 @@ while True: elif vl == '': print_row() elif vl == 'help': - print """ + print(""" commands: - tables lists tables + tables lists tables cols