A-A+

python 操作 PostgreSQL 模块:psycopg2

2015年05月14日 bottle 暂无评论 阅读 17,992 views 次

官方资料:http://www.psycopg.org/psycopg/docs/

安装:

  1. yum -y install python-psycopg2 (安装的版本可能是2.0)
  2. pip install psycopg2 (安装版本可能是2.6,目前新版,支持更多功能,建议)

 

如果以上2个方法安装失败,可下载源码安装包:

  1. wget  http://initd.org/psycopg/tarballs/PSYCOPG-2-6/psycopg2-2.6.tar.gz
  2. tar xf psycopg2-2.6.tar.gz
  3. cd psycopg2-2.6
  4. yum install -y postgresql-devel*
  5. python setup.py build
  6. sudo python setup.py install
  1. 使用:
  2. import psycopg2
  3. 连接数据库
  4. conn = psycopg2.connect(database=db_name,user=db_user,password=db_pass,host=db_ip,port=db_port)
  5. 建立游标
  6. cursor = conn.cursor()
  7. 执行SQL语句
  8. cursor.execute(sql)
  9. 提交
  10. conn.commit()
  11. 关闭
  12. conn.close()
 封装读、写数据库的函数,方便后面代码的调用
  1. import psycopg2
  2. import logging
  3. db_name = "****"
  4. db_user = "****"
  5. db_pass = "****"
  6. db_ip = "****"
  7. error_log =  "****"
  8. #定义日志输出格式
  9. logging.basicConfig(level=logging.ERROR,
  10.         format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
  11.         datefmt = '%Y-%m-%d %H:%M:%S',
  12.         filename = error_log,
  13.         filemode = 'a')
  14. def writeDb(sql,data):
  15.     """
  16.     连接mysql数据库(写),并进行写的操作,如果连接失败,会把错误写入日志中,并返回false,如果sql执行失败,也会把错误写入日志中,并返回false,如果所有执行正常,则返回true
  17.     """
  18.     try:
  19.         conn = psycopg2.connect(database=db_name,user=db_user,password=db_pass,host=db_ip,port=5432)
  20.         cursor = conn.cursor()
  21.     except Exception,e:
  22.         print e
  23.         logging.error('数据库连接失败:%s' % e)
  24.         return False
  25.     try:
  26.         cursor.execute(sql,data)
  27.         conn.commit()   #提交事务
  28.     except Exception,e:
  29.         conn.rollback()   #如果出错,则事务回滚
  30.         logging.error('数据写入失败:%s' % e)
  31.         return False
  32.     finally:
  33.         cursor.close()
  34.         conn.close()
  35.     return True
  36. def readDb(sql):
  37.     """
  38.     连接mysql数据库(从),并进行数据查询,如果连接失败,会把错误写入日志中,并返回false,如果sql执行失败,也会把错误写入日志中,并返回false,如果所有执行正常,则返回查询到的数据,这个数据是经过转换的,转成字典格式,方便模板调用,其中字典的key是数据表里的字段名
  39.     """
  40.     try:
  41.         conn = psycopg2.connect(database=db_name,user=db_user,password=db_pass,host=db_ip,port=5432)
  42.         cursor = conn.cursor()
  43.     except Exception,e:
  44.         print e
  45.         logging.error('数据库连接失败:%s' % e)
  46.         return False
  47.     try:
  48.         cursor.execute(sql)
  49.         data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in cursor.fetchall()]     #转换数据,字典格式
  50.     except Exception,e:
  51.         logging.error('数据执行失败:%s' % e)
  52.         return False
  53.     finally:
  54.         cursor.close()
  55.         conn.close()
  56.     return data
 代码调用上面封装好的数据库writeDb函数,并传递sql和value
  1. @route('/addkeyword',method='POST')
  2. def addkeyword():
  3.     s = request.environ.get('beaker.session')
  4.     if s.get('user',None) == None:
  5.         return redirect('/login')
  6.     keyword = request.forms.get('keyword').strip()
  7.     keycode = request.forms.get('keycode').strip()
  8.     notes = request.forms.get('notes').strip()
  9.     parentid = request.forms.get('site').strip()
  10.     sortid = 1
  11.     admin_id = s.get('userid','末知')
  12.     admin_name = s.get('user','末知')
  13.     if not keyword or not keycode or not notes or not parentid or not sortid:
  14.         return '-2'
  15.     sql = "insert into searchcode(code,code_name,notes,parentid,sortid,admin_id,admin_name) values(%s,%s,%s,%s,%s,%s,%s)"  
  16.     data = (keycode,keyword,notes,int(parentid),int(sortid),int(admin_id),admin_name,)  
  17.     status = writeDb(sql,data)  
  18.     if status:
  19.         return '0'
  20.     else:
  21.         return '-1'
关键词:

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: