convert to sqlalchemy postgresql

This commit is contained in:
cecilkorik 2025-03-14 19:28:06 -04:00
parent 487ee604b9
commit 7423063b69

121
sql.py
View file

@ -1,17 +1,13 @@
#!/usr/bin/env python2.4 #!/usr/bin/python3
import cx_Oracle
import sys import os
import os import sys
import traceback import sqlalchemy
try: import readline
import readline import traceback
except ImportError:
pass
if len(sys.argv) < 2:
connstr = raw_input('Connect string: ')
else:
connstr = sys.argv[1]
def softpad(s, l, padchar = " "): def softpad(s, l, padchar = " "):
padding = padchar * l padding = padchar * l
@ -24,7 +20,7 @@ def pad(s, l, padchar = " "):
rowbuffer = None rowbuffer = None
def print_row(): def print_row():
global rowbuffer global rowbuffer, cur, db
if not cur or not cur.description: if not cur or not cur.description:
return False return False
try: try:
@ -41,8 +37,8 @@ def print_row():
for i in range(len(rowbuffer)): for i in range(len(rowbuffer)):
l = len(rowbuffer[i]) l = len(rowbuffer[i])
if i > len(lens): if i > len(lens):
print lens print(lens)
print rowbuffer print(rowbuffer)
if l > lens[i]: if l > lens[i]:
lens[i] = l lens[i] = l
rowbuffer = None rowbuffer = None
@ -65,34 +61,54 @@ def print_row():
cols = allcols[i] cols = allcols[i]
for j in range(len(cols)): for j in range(len(cols)):
cols[j] = pad(cols[j], lens[j]) cols[j] = pad(cols[j], lens[j])
colhdrrow = ' | '.join(colhdrs) colhdrrow = ' | '.join(colhdrs)
seprow = '-' * len(colhdrrow) seprow = '-' * len(colhdrrow)
print colhdrrow print(colhdrrow)
print seprow print(seprow)
for cols in allcols: for cols in allcols:
colsrow = ' | '.join(cols) colsrow = ' | '.join(cols)
print colsrow print(colsrow)
rowbuffer = cur.fetchone() rowbuffer = cur.fetchone()
if rowbuffer: if rowbuffer:
print " ( more ) " print(" ( more ) ")
return True return True
except: except:
traceback.print_exc() traceback.print_exc()
return False return False
db = cx_Oracle.connect(connstr)
cur = db.cursor()
opts = { opts = {
'page': '20', 'page': '20',
'hide_null_tablespace': '1', 'hide_null_tablespace': '1',
'hide_tablespaces': 'SYSTEM;SYSAUX;SDE;SPATIAL_DATA' '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 do_quit = False
while True: while True:
try: try:
v = raw_input('# ') v = input('# ')
except EOFError: except EOFError:
do_quit = True do_quit = True
@ -100,7 +116,7 @@ while True:
break break
v = v.strip() v = v.strip()
vl = v.lower() vl = v.lower()
if vl == 'quit' or vl == 'exit': if vl == 'quit' or vl == 'exit':
break break
elif vl == 'commit': elif vl == 'commit':
@ -109,20 +125,8 @@ while True:
db.rollback() db.rollback()
elif vl == 'tables': elif vl == 'tables':
rowbuffer = None rowbuffer = None
conds = ["tablespace_name != '%s'" % (x,) for x in opts['hide_tablespaces'].split(';')] cur.execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES")
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,))
print_row() print_row()
elif vl[:5] == 'exec ':
cmd = v[5:]
try:
exec cmd
except:
traceback.print_exc()
elif vl[:5] == 'cols ': elif vl[:5] == 'cols ':
rowbuffer = None rowbuffer = None
vs = v.split(' ') vs = v.split(' ')
@ -130,9 +134,10 @@ while True:
try: try:
c2.execute("select * from %s where 1 is null" % (vs[1],)) c2.execute("select * from %s where 1 is null" % (vs[1],))
for coldata in c2.description: for coldata in c2.description:
print "%s%s" % (softpad(coldata[0], 40), coldata[1]) print("%s%s" % (softpad(coldata[0], 40), coldata[1]))
except cx_Oracle.DatabaseError, e: except:
sys.stdout.write(str(e)) traceback.print_exc()
sys.stdout.write('\n')
elif vl[:4] == 'set ': elif vl[:4] == 'set ':
vs = v[4:] vs = v[4:]
vi = vs.find('=') vi = vs.find('=')
@ -142,31 +147,27 @@ while True:
elif vl == '': elif vl == '':
print_row() print_row()
elif vl == 'help': elif vl == 'help':
print """ print("""
commands: commands:
tables lists tables tables lists tables
cols <table> lists columns of table cols <table> lists columns of table
commit commits any pending updates or inserts commit commits any pending updates or inserts
rollback aborts and pending updates or inserts rollback aborts and pending updates or inserts
help displays this help help displays this help
quit exits sql.py quit exits sql.py
""" """)
else: else:
rowbuffer = None rowbuffer = None
try: try:
v = v.rstrip(';') v = v.rstrip(';')
cur.execute(v) cur.execute(v)
print_row() print_row()
except cx_Oracle.DatabaseError, e: except:
try: try:
cur.execute("SELECT 1 FROM DUAL") c2 = db.cursor()
except cx_Oracle.DatabaseError: c2.execute("SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE 1 IS NULL")
print "Database connection lost!" except:
print("Database connection lost!")
sys.exit(1) sys.exit(1)
sys.stdout.write(str(e)) sys.stdout.write(str(sys.exc_info))
print ""