 复制import cx_Oracle import os import sys os.environ[NLS_LANG] =AMERICAN_AMERICA.ZHS16GBK; connectresult=0; promptstr=""; fetchsize=50; #conn = cx_Oracle.connect(yzs/yzs@mydb); print("------------Welcome To Python Sqlplus ----------------------"); print("| Version : 0.1"); print("| Author : MKing"); print("| Blog : http://blog.csdn.net/yzsind"); print("| Sina weibo : http://weibo.com/yzsind"); print("| Release Date: 2011-08-08"); print("| Login Example1:username/password@tnsname"); print("| Login Example2:username/password@host:port/dbname"); print("| Input exit to Quit"); print("-----------------------------------------------------------"); print(""); def getConnect(loginstr): global connectresult global promptstr try: connectresult=0; promptstr=""; conn= cx_Oracle.connect(loginstr); promptstr=conn.username+"@"+conn.dsn; print("Database version:",模拟conn.version); print("Connected."); connectresult=1; return conn except cx_Oracle.InterfaceError as exc: error, = exc.args print(exc); except cx_Oracle.DatabaseError as exc: error, = exc.args print(error.message); def getcolformatstr(coldef): if coldef[1]==cx_Oracle.NUMBER: formatstr=%12s; else: if coldef[2]<=32: formatstr=%-+str(coldef[2])+s; else: formatstr=%-32s; return formatstr ######################################################################### while 1: try: loginstr=raw_input("login>").strip(); if loginstr=="" : continue; elif loginstr in ["exit","exit;"]: print("...bye..."); exit(); conn = getConnect(loginstr); if connectresult==1: break; except KeyboardInterrupt: print("^C"); continue; while 1: sqlstr=""; try: sqlstrline=raw_input(promptstr+">").strip(); if sqlstrline=="" : continue; elif sqlstrline.lower() in ["exit","exit;"]: print("...bye..."); exit(); elif sqlstrline[0:7].lower()=="connect" : conn = getConnect(sqlstrline[8:]); elif sqlstrline.lower() in ["disconnect","disconnect;"] : conn.close(); print("Connection closed."); elif sqlstrline[0:4].lower()=="host" : os.system(sqlstrline[4:]) else: sqlstrsqlstr=sqlstr+sqlstrline+\n; while sqlstrline[-1]!=";" : sqlstrline=raw_input().strip(); sqlstrsqlstr=sqlstr+sqlstrline+\n; sqlstrsqlstr=sqlstr[0:len(sqlstr)-2] try: cursor = conn.cursor(); cursor.execute(sqlstr); if sqlstr[0:6].lower()=="select" : cols=[] for col in cursor.description: print(getcolformatstr(col) % (col[0])), print(); for col in cursor.description: if col[1]==cx_Oracle.NUMBER: print(-*12),; else: if col[2]<=32: print(-*col[2]),; else: print(-*32),; print(); recs = cursor.fetchmany(fetchsize); while len(recs)>0: for row in recs: for i in range(len(row)): if row[i]!=None: print(getcolformatstr(cursor.description[i]) % row[i]),; else: print(getcolformatstr(cursor.description[i]) % ),; print() recs = cursor.fetchmany(fetchsize); print(str(cursor.rowcount)+" rows selected."); elif sqlstr[0:6].lower()=="insert" : print(str(cursor.rowcount)+" rows inserted."); elif sqlstr[0:6].lower()=="update" : print(str(cursor.rowcount)+" rows updated."); elif sqlstr[0:6].lower()=="delete" : print(str(cursor.rowcount)+" rows deleted."); elif sqlstr[0:5].lower()=="merge" : print(str(cursor.rowcount)+" rows merged."); elif sqlstr[0:6].lower()=="commit" : print("Commit complete."); elif sqlstr[0:6].lower()=="rollback" : print("Rollback complete."); else : print("sql execute complete."); except cx_Oracle.InterfaceError as exc: error, = exc.args print(exc); except cx_Oracle.DatabaseError as exc: error, = exc.args print(error.message); except KeyboardInterrupt: print("^C"); continue; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.177.178.179.180.181.182.183.184.185.186.187.188.189.190.191.192.193.194.195.196.197.198.199.200.201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217.218.219.220.221.222.223.224.225.226.227.228.229.230.231.232.233.234.235.236.237.238.239.240.241.242.243.244.245.246.247.248.249.250.251.252.253.254.255.256.257.258.259.260.261.262.263.264.265.266.267.268.269.270.271. |