Python模拟Oracle的SQL/PLUS工具的实现方法

Python模拟Oracle的SQL/PLUS工具的实现方法是本文我们主要要介绍的内容。我们知道,团队计划开发数据库服务平台,需要用到一些服务器的脚本开发,为了了解python,给自己定了一个模拟sqlplus的小需求,然后去实现。

创新互联-专业网站定制、快速模板网站建设、高性价比播州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式播州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖播州地区。费用合理售后完善,10余年实体公司更值得信赖。

个人体会:

python开发快捷,集成很多常用的公共包,对常用数据结构使用很方便,***的缺点是版本较多,新版本不向前兼容,对AIX及HP-UNIX不太常用的OS也缺少直接支持。

以下是工具演示:

以下是源代码:

以下代码用的python版本是python2.7 http://www.python.org/
需要安装cx_Oracle开发包(python访问ORACLE用的) http://cx-oracle.sourceforge.net/

 
 
 
 
  1. import cx_Oracle  
  2. import os  
  3. import sys  
  4. os.environ['NLS_LANG'] ='AMERICAN_AMERICA.ZHS16GBK';  
  5. connectresult=0;  
  6. promptstr="";  
  7. fetchsize=50;  
  8. #conn = cx_Oracle.connect('yzs/yzs@mydb');   
  9. print("------------Welcome To Python Sqlplus ----------------------");  
  10. print("|  Version     : 0.1");  
  11. print("|  Author      : MKing");  
  12. print("|  Blog        : http://blog.csdn.net/yzsind");  
  13. print("|  Sina weibo  : http://weibo.com/yzsind");  
  14. print("|  Release Date: 2011-08-08");  
  15. print("|  Login Example1:username/password@tnsname");  
  16. print("|  Login Example2:username/password@host:port/dbname");  
  17. print("|  Input exit to Quit");  
  18. print("-----------------------------------------------------------");  
  19. print("");  
  20.   
  21. def getConnect(loginstr):  
  22.   global connectresult  
  23.   global promptstr  
  24.   try:  
  25.     connectresult=0;  
  26.     promptstr="";  
  27.     conn= cx_Oracle.connect(loginstr);  
  28.     promptstr=conn.username+"@"+conn.dsn;  
  29.     print("Database version:",conn.version);  
  30.     print("Connected.");  
  31.     connectresult=1;  
  32.     return conn  
  33.   except cx_Oracle.InterfaceError as exc:  
  34.     error, = exc.args  
  35.     print(exc);  
  36.   except cx_Oracle.DatabaseError as exc:  
  37.     error, = exc.args  
  38.     print(error.message);  
  39. def getcolformatstr(coldef):  
  40.   if coldef[1]==cx_Oracle.NUMBER:  
  41.     formatstr='%12s';  
  42.   else:  
  43.     if coldef[2]<=32:  
  44.       formatstr='%-'+str(coldef[2])+'s';  
  45.     else:  
  46.       formatstr='%-32s';  
  47.   return formatstr  
  48.     
  49. #########################################################################   
  50. while 1:  
  51.   try:  
  52.     loginstr=raw_input("login>").strip();  
  53.     if loginstr=="" :  
  54.       continue;  
  55.     elif loginstr in ["exit","exit;"]:  
  56.       print("...bye...");  
  57.       exit();      
  58.     conn = getConnect(loginstr);  
  59.     if connectresult==1:  
  60.       break;  
  61.   except KeyboardInterrupt:  
  62.     print("^C");  
  63.     continue;    
  64. while 1:  
  65.   sqlstr="";  
  66.   try:  
  67.     sqlstrline=raw_input(promptstr+">").strip();  
  68.     if sqlstrline=="" :  
  69.       continue;  
  70.     elif sqlstrline.lower() in ["exit","exit;"]:  
  71.       print("...bye...");  
  72.       exit();  
  73.     elif sqlstrline[0:7].lower()=="connect" :  
  74.       conn = getConnect(sqlstrline[8:]);  
  75.     elif sqlstrline.lower() in ["disconnect","disconnect;"] :  
  76.       conn.close();  
  77.       print("Connection closed.");  
  78.     elif sqlstrline[0:4].lower()=="host" :  
  79.       os.system(sqlstrline[4:])  
  80.     else:  
  81.       sqlstrsqlstr=sqlstr+sqlstrline+'\n';  
  82.       while sqlstrline[-1]!=";" :  
  83.         sqlstrline=raw_input().strip();  
  84.         sqlstrsqlstr=sqlstr+sqlstrline+'\n';  
  85.       sqlstrsqlstr=sqlstr[0:len(sqlstr)-2]  
  86.       try:  
  87.         cursor = conn.cursor();  
  88.         cursor.execute(sqlstr);  
  89.         if sqlstr[0:6].lower()=="select" :  
  90.           cols=[]  
  91.           for col in cursor.description:  
  92.             print(getcolformatstr(col) % (col[0])),  
  93.           print('');  
  94.           for col in cursor.description:  
  95.             if col[1]==cx_Oracle.NUMBER:  
  96.               print('-'*12),;  
  97.             else:  
  98.               if col[2]<=32:  
  99.                 print('-'*col[2]),;  
  100.               else:  
  101.                 print('-'*32),;  
  102.           print('');  
  103.           recs = cursor.fetchmany(fetchsize);  
  104.           while len(recs)>0:  
  105.             for row in recs:  
  106.               for i in range(len(row)):  
  107.                 if row[i]!=None:  
  108.                   print(getcolformatstr(cursor.description[i]) % row[i]),;  
  109.                 else:  
  110.                   print(getcolformatstr(cursor.description[i]) % ''),;    
  111.               print('')  
  112.             recs = cursor.fetchmany(fetchsize);  
  113.           print(str(cursor.rowcount)+" rows selected.");  
  114.         elif sqlstr[0:6].lower()=="insert" :  
  115.           print(str(cursor.rowcount)+" rows inserted.");  
  116.         elif sqlstr[0:6].lower()=="update" :  
  117.           print(str(cursor.rowcount)+" rows updated.");  
  118.         elif sqlstr[0:6].lower()=="delete" :  
  119.           print(str(cursor.rowcount)+" rows deleted.");  
  120.         elif sqlstr[0:5].lower()=="merge" :  
  121.           print(str(cursor.rowcount)+" rows merged.");  
  122.         elif sqlstr[0:6].lower()=="commit" :  
  123.           print("Commit complete.");  
  124.         elif sqlstr[0:6].lower()=="rollback" :  
  125.           print("Rollback complete.");  
  126.         else :  
  127.           print("sql execute complete.");  
  128.       except cx_Oracle.InterfaceError as exc:  
  129.         error, = exc.args  
  130.         print(exc);  
  131.       except cx_Oracle.DatabaseError as exc:  
  132.         error, = exc.args  
  133.         print(error.message);  
  134.   except KeyboardInterrupt:  
  135.     print("^C");  
  136.     continue;  

特别说明:纯属个人学习python的代码,未考虑扩展性与性能,未经过专业测试,不建议拿到实际工作中当SQLPLUS用。

关于Python模拟Oracle的SQL/PLUS工具的实现方法就介绍到这里了,希望本次的介绍能够对您有所收获!

网站标题:Python模拟Oracle的SQL/PLUS工具的实现方法
文章出自:http://www.csdahua.cn/qtweb/news19/222669.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网