歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python:操作PostgreSQL數據庫(使用PyGreSQL)

這裡(http://www.linuxidc.com/Linux/2012-02/54213.htm)寫了使用python寫了操作嵌入式數據庫SQLite的方法,今天用python寫了針對個人比較熟悉的開源數據庫PostgreSQL的常用操作,開發過程簡介如下:

一、環境信息: 

   1、操作系統:

        RedHat Enterprise Linux 4

        Windows XP SP2

  2、數據庫:

        PostgreSQL8.3

  3、 開發工具:

        Eclipse+Pydev+python2.6+PyGreSQL(提供pg模塊)

  4、說明:

        a、PostgreSQL數據庫運行於RedHat Linux上,Windows下也要安裝pgAdmin(訪問PostgreSQL服務器的客戶端)。

        b、PyGreSQL(即pg)模塊下載路徑及API手冊:http://www.pygresql.org/

二、配置:

       1、將pgAdmin安裝路徑下以下子目錄添加到系統環境變量中:

             E:\Program Files\PostgreSQL\8.3\lib

             E:\Program Files\PostgreSQL\8.3\bin

       2、將python安裝目錄C:\Python26\Lib\site-packages\pywin32_system32下的dll文件拷貝到C:\WINDOWS\system32

       3、說明:

a. 如果跳過以上兩步,在import pg時將會報錯,浪費較長時間才搞定。

b. 如果對PostgreSQL安裝和配置不熟悉,請參考本博客中以下幾篇文章:

《RedHat Linux上安裝PostgreSQL》 http://www.linuxidc.com/Linux/2011-08/40521.htm

《PostgreSQL服務端監聽設置及客戶端連接方法》 http://www.linuxidc.com/Linux/2011-08/40528.htm

《PostgreSQL數據庫創建、刪除方法》 http://www.linuxidc.com/Linux/2011-08/40525.htm

三、程序實現:

[python] view plaincopyprint?

  1. #!/usr/bin/env python   
  2. # -*- coding: utf-8 -*-   
  3.   
  4. #導入日志及pg模塊   
  5. import logging  
  6. import logging.config  
  7. import pg  
  8.   
  9. #日志配置文件名   
  10. LOG_FILENAME = 'logging.conf'  
  11.   
  12. #日志語句提示信息   
  13. LOG_CONTENT_NAME = 'pg_log'  
  14.   
  15. def log_init(log_config_filename, logname):  
  16.     ''''' 
  17.     Function:日志模塊初始化函數 
  18.     Input:log_config_filename:日志配置文件名 
  19.            lognmae:每條日志前的提示語句 
  20.     Output: logger 
  21.     author: socrates 
  22.     date:2012-02-12 
  23.     '''  
  24.     logging.config.fileConfig(log_config_filename)  
  25.     logger = logging.getLogger(logname)  
  26.     return logger  
  27.   
  28. def operate_postgre_tbl_product():  
  29.     ''''' 
  30.     Function:操作pg數據庫函數 
  31.     Input:NONE 
  32.     Output: NONE 
  33.     author: socrates 
  34.     date:2012-02-12 
  35.     '''    
  36.     pgdb_logger.debug("operate_postgre_tbl_product enter...")   
  37.       
  38.     #連接數據庫     
  39.     try:  
  40.         pgdb_conn = pg.connect(dbname = 'kevin_test', host = '192.168.230.128', user = 'dyx1024', passwd = '888888')  
  41.     except Exception, e:  
  42.          print e.args[0]  
  43.          pgdb_logger.error("conntect postgre database failed, ret = %s" % e.args[0])      
  44.          return      
  45.        
  46.     pgdb_logger.info("conntect postgre database(kevin_test) succ.")   
  47.           
  48.     #刪除表   
  49.     sql_desc = "DROP TABLE IF EXISTS tbl_product3;"  
  50.     try:  
  51.         pgdb_conn.query(sql_desc)  
  52.     except Exception, e:  
  53.         print 'drop table failed'  
  54.         pgdb_logger.error("drop table failed, ret = %s" % e.args[0])  
  55.         pgdb_conn.close()    
  56.         return  
  57.       
  58.     pgdb_logger.info("drop table(tbl_product3) succ.")   
  59.     
  60.     #創建表   
  61.     sql_desc = '''''CREATE TABLE tbl_product3( 
  62.         i_index INTEGER, 
  63.         sv_productname VARCHAR(32) 
  64.         );'''  
  65.     try:      
  66.         pgdb_conn.query(sql_desc)  
  67.     except Exception, e:  
  68.         print 'create table failed'  
  69.         pgdb_logger.error("create table failed, ret = %s" % e.args[0])  
  70.         pgdb_conn.close()    
  71.         return          
  72.      
  73.     pgdb_logger.info("create table(tbl_product3) succ.")   
  74.         
  75.     #插入記錄      
  76.     sql_desc = "INSERT INTO tbl_product3(sv_productname) values('apple')"  
  77.     try:  
  78.         pgdb_conn.query(sql_desc)  
  79.     except Exception, e:  
  80.         print 'insert record into table failed'  
  81.         pgdb_logger.error("insert record into table failed, ret = %s" % e.args[0])  
  82.         pgdb_conn.close()    
  83.         return      
  84.        
  85.     pgdb_logger.info("insert record into table(tbl_product3) succ.")       
  86.        
  87.     #查詢表 1          
  88.     sql_desc = "select * from tbl_product3"  
  89.     for row in pgdb_conn.query(sql_desc).dictresult():  
  90.         print row  
  91.         pgdb_logger.info("%s", row)   
  92.    
  93.     #查詢表2           
  94.     sql_desc = "select * from tbl_test_port"  
  95.     for row in pgdb_conn.query(sql_desc).dictresult():  
  96.         print row   
  97.         pgdb_logger.info("%s", row)          
  98.        
  99.     #關閉數據庫連接        
  100.     pgdb_conn.close()         
  101.     pgdb_logger.debug("operate_sqlite3_tbl_product leaving...")   
  102.   
  103. if __name__ == '__main__':   
  104.       
  105.     #初始化日志系統   
  106.     pgdb_logger = log_init(LOG_FILENAME, LOG_CONTENT_NAME)     
  107.       
  108.     #操作數據庫   
  109.     operate_postgre_tbl_product()  
  110.       
Copyright © Linux教程網 All Rights Reserved