热门标签 | 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 ~]$

推荐阅读
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文介绍了如何通过在数据库表中增加一个字段来记录文章的访问次数,并提供了一个示例方法用于更新该字段值。 ... [详细]
  • 本文深入探讨了 PHP 实现计划任务的方法,包括其原理、具体实现方式以及在不同操作系统中的应用。通过详细示例和代码片段,帮助开发者理解和掌握如何高效地设置和管理定时任务。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 如何从python读取sql[mysql基础教程]
    从python读取sql的方法:1、利用python内置的open函数读入sql文件;2、利用第三方库pymysql中的connect函数连接mysql服务器;3、利用第三方库pa ... [详细]
  • 本文详细介绍了如何在Python3环境中配置Appium1.4.6,并指导如何连接模拟器进行自动化测试。通过本文,您将了解从环境搭建到模拟器连接的完整流程。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文旨在详细介绍如何在PL/SQL环境中调试Oracle数据库中的触发器。虽然触发器能够实现某些复杂的功能,但其使用可能增加系统的维护难度。因此,本文不仅提供技术指导,还讨论了触发器使用的利弊。 ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
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社区 版权所有