Python使用PyGreSQL操作PostgreSQL数据库教程


Posted in Python onJuly 30, 2014

PostgreSQL是一款功能强大的开源关系型数据库,本文使用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/
 PyGreSQL模块点此本站下载

二、配置:

       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、说明:如果跳过以上两步,在import pg时将会报错,并且会浪费较长时间才能搞定。

三、程序实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#导入日志及pg模块
import logging
import logging.config
import pg

#日志配置文件名
LOG_FILENAME = 'logging.conf'

#日志语句提示信息
LOG_CONTENT_NAME = 'pg_log'

def log_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)
  return logger

def operate_postgre_tbl_product():
  '''
  Function:操作pg数据库函数
  Input:NONE
  Output: NONE
  author: socrates
  date:2012-02-12
  ''' 
  pgdb_logger.debug("operate_postgre_tbl_product enter...") 
  
  #连接数据库 
  try:
    pgdb_conn = pg.connect(dbname = 'kevin_test', host = '192.168.230.128', user = 'dyx1024', passwd = '888888')
  except Exception, e:
     print e.args[0]
     pgdb_logger.error("conntect postgre database failed, ret = %s" % e.args[0])  
     return  
   
  pgdb_logger.info("conntect postgre database(kevin_test) succ.") 
    
  #删除表
  sql_desc = "DROP TABLE IF EXISTS tbl_product3;"
  try:
    pgdb_conn.query(sql_desc)
  except Exception, e:
    print 'drop table failed'
    pgdb_logger.error("drop table failed, ret = %s" % e.args[0])
    pgdb_conn.close() 
    return
  
  pgdb_logger.info("drop table(tbl_product3) succ.") 
 
  #创建表
  sql_desc = '''CREATE TABLE tbl_product3(
    i_index INTEGER,
    sv_productname VARCHAR(32)
    );'''
  try:  
    pgdb_conn.query(sql_desc)
  except Exception, e:
    print 'create table failed'
    pgdb_logger.error("create table failed, ret = %s" % e.args[0])
    pgdb_conn.close() 
    return    
  
  pgdb_logger.info("create table(tbl_product3) succ.") 
   
  #插入记录  
  sql_desc = "INSERT INTO tbl_product3(sv_productname) values('apple')"
  try:
    pgdb_conn.query(sql_desc)
  except Exception, e:
    print 'insert record into table failed'
    pgdb_logger.error("insert record into table failed, ret = %s" % e.args[0])
    pgdb_conn.close() 
    return  
   
  pgdb_logger.info("insert record into table(tbl_product3) succ.")   
   
  #查询表 1    
  sql_desc = "select * from tbl_product3"
  for row in pgdb_conn.query(sql_desc).dictresult():
    print row
    pgdb_logger.info("%s", row) 
 
  #查询表2    
  sql_desc = "select * from tbl_test_port"
  for row in pgdb_conn.query(sql_desc).dictresult():
    print row 
    pgdb_logger.info("%s", row)    
   
  #关闭数据库连接   
  pgdb_conn.close()    
  pgdb_logger.debug("operate_sqlite3_tbl_product leaving...") 

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-12 18:09:53,536 pg_log]DEBUG: operate_postgre_tbl_product enter... (test_func.py:36)
[2012-02-12 18:09:53,772 pg_log]INFO: conntect postgre database(kevin_test) succ. (test_func.py:46)
[2012-02-12 18:09:53,786 pg_log]INFO: drop table(tbl_product3) succ. (test_func.py:58)
[2012-02-12 18:09:53,802 pg_log]INFO: create table(tbl_product3) succ. (test_func.py:73)
[2012-02-12 18:09:53,802 pg_log]INFO: insert record into table(tbl_product3) succ. (test_func.py:85)
[2012-02-12 18:09:53,802 pg_log]INFO: {'sv_productname': 'apple', 'i_index': None} (test_func.py:91)
[2012-02-12 18:09:53,802 pg_log]INFO: {'i_status': 1, 'i_port': 2, 'i_index': 1} (test_func.py:97)
[2012-02-12 18:09:53,802 pg_log]INFO: {'i_status': 1, 'i_port': 3, 'i_index': 2} (test_func.py:97)
[2012-02-12 18:09:53,802 pg_log]INFO: {'i_status': 1, 'i_port': 5, 'i_index': 3} (test_func.py:97)
[2012-02-12 18:09:53,802 pg_log]INFO: {'i_status': 1, 'i_port': 0, 'i_index': 5} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 18, 'i_index': 7} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 8, 'i_index': 8} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 7, 'i_index': 9} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 21, 'i_index': 10} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 23, 'i_index': 11} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 29, 'i_index': 12} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 3000, 'i_index': 4} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]INFO: {'i_status': 1, 'i_port': 1999, 'i_index': 6} (test_func.py:97)
[2012-02-12 18:09:53,819 pg_log]DEBUG: operate_sqlite3_tbl_product leaving... (test_func.py:101)

3、psql查看结果:

[root@kevin ~]# su - postgres
[postgres@kevin ~]$ psql -U dyx1024 -d kevin_test
psql (8.4.2)
Type "help" for help.

kevin_test=# \dt
        List of relations
 Schema |   Name   | Type |   Owner   
--------+---------------+-------+----------------
 public | tbl_product3 | table | dyx1024
 public | tbl_test_port | table | pg_test_user_3
(2 rows)

kevin_test=# select * from tbl_product3;
 i_index | sv_productname 
---------+----------------
     | apple
(1 row)

kevin_test=# select * from tbl_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
(12 rows)

kevin_test=# \q
[postgres@kevin ~]$
Python 相关文章推荐
Python中特殊函数集锦
Jul 27 Python
python更新列表的方法
Jul 28 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
python实现Flappy Bird源码
Dec 24 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python属性和内建属性实例解析
Jan 14 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python代码的打包与发布详解
Jul 30 #Python
Python中lambda的用法及其与def的区别解析
Jul 28 #Python
python代码制作configure文件示例
Jul 28 #Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 #Python
python调用新浪微博API项目实践
Jul 28 #Python
python中的sort方法使用详解
Jul 25 #Python
python实现监控linux性能及进程消耗性能的方法
Jul 25 #Python
You might like
example1.php
2006/10/09 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
js内置对象 学习笔记
2011/08/01 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
js实现tab切换效果
2017/02/16 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
python if not in 多条件判断代码
2016/09/21 Python
python在非root权限下的安装方法
2018/01/23 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
客户表扬信范文
2014/01/10 职场文书
家长给小学生的评语
2014/01/30 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
品质保证书格式
2015/02/28 职场文书
社区文明倡议书
2015/04/28 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
详解thinkphp的Auth类认证
2021/05/28 PHP
python使用pymysql模块操作MySQL
2021/06/16 Python
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
在CSS中使用when/else的方法
2022/01/18 HTML / CSS