热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用PyGreSQL操作PostgreSQL数据库

一、环境信息:1、操作系统:RedHatEnterpriseLinux4WindowsXPSP22、数据库:PostgreSQL8.33、开发工具:Eclipse+Pydev+python2.6+PyGreSQL(提供pg模块)4、说明:a、PostgreSQL数据库运行于RedHatLinux上,Windows下也要

一、环境信息: 

   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》

                  《PostgreSQL服务端监听设置及客户端连接方法》

                  《PostgreSQL数据库创建、删除方法》

                   更多PostgreSQL相关知识请访问从我的博客专栏:PostgreSQL系列

三、程序实现:

#!/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高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
hk129
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有