Python使用PyGreSQL操作PostgreSQL数据库教程
PostgreSQL是一款功能强大的开源关系型数据库,本文使用python实现了对开源数据库PostgreSQL的常用操作,其开发过程简介如下:
一、环境信息:
1、操作系统:
RedHatEnterpriseLinux4
WindowsXPSP2
2、数据库:
PostgreSQL8.3
3、开发工具:
Eclipse+Pydev+python2.6+PyGreSQL(提供pg模块)
4、说明:
a、PostgreSQL数据库运行于RedHatLinux上,Windows下也要安装pgAdmin(访问PostgreSQL服务器的客户端)。
b、PyGreSQL(即pg)模块下载路径及API手册:http://www.pygresql.org/
PyGreSQL模块点此本站下载
二、配置:
1、将pgAdmin安装路径下以下子目录添加到系统环境变量中:
E:\ProgramFiles\PostgreSQL\8.3\lib
E:\ProgramFiles\PostgreSQL\8.3\bin
2、将python安装目录C:\Python26\Lib\site-packages\pywin32_system32下的dll文件拷贝到C:\WINDOWS\system32
3、说明:如果跳过以上两步,在importpg时将会报错,并且会浪费较长时间才能搞定。
三、程序实现:
#!/usr/bin/envpython #-*-coding:utf-8-*- #导入日志及pg模块 importlogging importlogging.config importpg #日志配置文件名 LOG_FILENAME='logging.conf' #日志语句提示信息 LOG_CONTENT_NAME='pg_log' deflog_init(log_config_filename,logname): ''' Function:日志模块初始化函数 Input:log_config_filename:日志配置文件名 lognmae:每条日志前的提示语句 Output:logger author:socrates date:2012-02-12 ''' logging.config.fileConfig(log_config_filename) logger=logging.getLogger(logname) returnlogger defoperate_postgre_tbl_product(): ''' Function:操作pg数据库函数 Input:NONE Output:NONE author:socrates date:2012-02-12 ''' pgdb_logger.debug("operate_postgre_tbl_productenter...") #连接数据库 try: pgdb_conn=pg.connect(dbname='kevin_test',host='192.168.230.128',user='dyx1024',passwd='888888') exceptException,e: printe.args[0] pgdb_logger.error("conntectpostgredatabasefailed,ret=%s"%e.args[0]) return pgdb_logger.info("conntectpostgredatabase(kevin_test)succ.") #删除表 sql_desc="DROPTABLEIFEXISTStbl_product3;" try: pgdb_conn.query(sql_desc) exceptException,e: print'droptablefailed' pgdb_logger.error("droptablefailed,ret=%s"%e.args[0]) pgdb_conn.close() return pgdb_logger.info("droptable(tbl_product3)succ.") #创建表 sql_desc='''CREATETABLEtbl_product3( i_indexINTEGER, sv_productnameVARCHAR(32) );''' try: pgdb_conn.query(sql_desc) exceptException,e: print'createtablefailed' pgdb_logger.error("createtablefailed,ret=%s"%e.args[0]) pgdb_conn.close() return pgdb_logger.info("createtable(tbl_product3)succ.") #插入记录 sql_desc="INSERTINTOtbl_product3(sv_productname)values('apple')" try: pgdb_conn.query(sql_desc) exceptException,e: print'insertrecordintotablefailed' pgdb_logger.error("insertrecordintotablefailed,ret=%s"%e.args[0]) pgdb_conn.close() return pgdb_logger.info("insertrecordintotable(tbl_product3)succ.") #查询表1 sql_desc="select*fromtbl_product3" forrowinpgdb_conn.query(sql_desc).dictresult(): printrow pgdb_logger.info("%s",row) #查询表2 sql_desc="select*fromtbl_test_port" forrowinpgdb_conn.query(sql_desc).dictresult(): printrow pgdb_logger.info("%s",row) #关闭数据库连接 pgdb_conn.close() pgdb_logger.debug("operate_sqlite3_tbl_productleaving...") if__name__=='__main__': #初始化日志系统 pgdb_logger=log_init(LOG_FILENAME,LOG_CONTENT_NAME) #操作数据库 operate_postgre_tbl_product()
四、测试:
1、运行后命令行打印结果:
{'sv_productname':'apple','i_index':None} {'i_status':1,'i_port':2,'i_index':1} {'i_status':1,'i_port':3,'i_index':2} {'i_status':1,'i_port':5,'i_index':3} {'i_status':1,'i_port':0,'i_index':5} {'i_status':1,'i_port':18,'i_index':7} {'i_status':1,'i_port':8,'i_index':8} {'i_status':1,'i_port':7,'i_index':9} {'i_status':1,'i_port':21,'i_index':10} {'i_status':1,'i_port':23,'i_index':11} {'i_status':1,'i_port':29,'i_index':12} {'i_status':1,'i_port':3000,'i_index':4} {'i_status':1,'i_port':1999,'i_index':6}
2、日志文件内容:
[2012-02-1218:09:53,536pg_log]DEBUG:operate_postgre_tbl_productenter...(test_func.py:36) [2012-02-1218:09:53,772pg_log]INFO:conntectpostgredatabase(kevin_test)succ.(test_func.py:46) [2012-02-1218:09:53,786pg_log]INFO:droptable(tbl_product3)succ.(test_func.py:58) [2012-02-1218:09:53,802pg_log]INFO:createtable(tbl_product3)succ.(test_func.py:73) [2012-02-1218:09:53,802pg_log]INFO:insertrecordintotable(tbl_product3)succ.(test_func.py:85) [2012-02-1218:09:53,802pg_log]INFO:{'sv_productname':'apple','i_index':None}(test_func.py:91) [2012-02-1218:09:53,802pg_log]INFO:{'i_status':1,'i_port':2,'i_index':1}(test_func.py:97) [2012-02-1218:09:53,802pg_log]INFO:{'i_status':1,'i_port':3,'i_index':2}(test_func.py:97) [2012-02-1218:09:53,802pg_log]INFO:{'i_status':1,'i_port':5,'i_index':3}(test_func.py:97) [2012-02-1218:09:53,802pg_log]INFO:{'i_status':1,'i_port':0,'i_index':5}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':18,'i_index':7}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':8,'i_index':8}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':7,'i_index':9}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':21,'i_index':10}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':23,'i_index':11}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':29,'i_index':12}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':3000,'i_index':4}(test_func.py:97) [2012-02-1218:09:53,819pg_log]INFO:{'i_status':1,'i_port':1999,'i_index':6}(test_func.py:97) [2012-02-1218:09:53,819pg_log]DEBUG:operate_sqlite3_tbl_productleaving...(test_func.py:101)
3、psql查看结果:
[root@kevin~]#su-postgres [postgres@kevin~]$psql-Udyx1024-dkevin_test psql(8.4.2) Type"help"forhelp. kevin_test=#\dt Listofrelations Schema|Name|Type|Owner --------+---------------+-------+---------------- public|tbl_product3|table|dyx1024 public|tbl_test_port|table|pg_test_user_3 (2rows) kevin_test=#select*fromtbl_product3; i_index|sv_productname ---------+---------------- |apple (1row) kevin_test=#select*fromtbl_test_port; i_index|i_port|i_status ---------+--------+---------- 1|2|1 2|3|1 3|5|1 5|0|1 7|18|1 8|8|1 9|7|1 10|21|1 11|23|1 12|29|1 4|3000|1 6|1999|1 (12rows) kevin_test=#\q [postgres@kevin~]$