Python中用psycopg2模块操作PostgreSQL方法


Posted in Python onNovember 28, 2017

其实在Python中可以用来连接PostgreSQL的模块很多,这里比较推荐psycopg2。psycopg2安装起来非常的简单(pip install psycopg2),这里主要重点介绍下如何使用。

安装psycopg2模块:

怎么验证是否已经安装过psycopy2?

Python中用psycopg2模块操作PostgreSQL方法

编写上面代码,运行看是否抛出缺少psycopg2模块。

Python中用psycopg2模块操作PostgreSQL方法

安装方法1:

1)使用psycopg2-2.4.2.win-amd64-py2.7-pg9.0.4-release.exe安装,下载地址:http://vdisk.weibo.com/s/Cd8pPaw56Ozys

直接运行exe,不出错误,运行上边代码验证代码无错误,基本算是安装完成了。

2)怎么卸载?

2.1)找到安装目录:C:\Python27,发现下边包含文件:Removepsycopg2.exe,运行,来删除;

2.2)如果运行失败的话,进入目录:C:\Python27\Lib\site-packages下,找到psycopg2文件夹和psycopg2-2.4.2-py2.7.egg-info文件,右键删除。

2.3)运行上边的代码,确认是否删除成功。

安装方法2:

使用.whl安装,下载地址:https://pypi.python.org/pypi/psycopg2/

Python中用psycopg2模块操作PostgreSQL方法

下载文件:psycopg2-2.6.2-cp27-none-win_amd64.whl

我这里把psycopg2-2.6.2-cp27-none-win_amd64.whl拷贝到安装目录下Scripts文件夹中。

cmd中运行代码:pip install C:\Python27\Scripts\psycopg2-2.6.2-cp27-none-win_amd64.whl

Python中用psycopg2模块操作PostgreSQL方法

运行上边的代码,确认是否删除成功。

通过psycopg2操作数据库:

使用账户postgres,创建测试数据库testdb。

Python中用psycopg2模块操作PostgreSQL方法

参考yiibai.comAPI:

S.N. API & 描述

1 psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432")

这个API打开一个连接到PostgreSQL数据库。如果成功打开数据库时,它返回一个连接对象。

2 connection.cursor()

该程序创建一个光标将用于整个数据库使用Python编程。

3 cursor.execute(sql [, optional parameters])

此例程执行SQL语句。可被参数化的SQL语句(即占位符,而不是SQL文字)。 psycopg2的模块支持占位符用%s标志

例如:cursor.execute("insert into people values (%s, %s)", (who, age))

4 curosr.executemany(sql, seq_of_parameters)

该程序执行SQL命令对所有参数序列或序列中的sql映射。

5 curosr.callproc(procname[, parameters])

这个程序执行的存储数据库程序给定的名称。该程序预计为每一个参数,参数的顺序必须包含一个条目。

6 cursor.rowcount

这个只读属性,它返回数据库中的行的总数已修改,插入或删除最后 execute*().

7 connection.commit()

此方法提交当前事务。如果不调用这个方法,无论做了什么修改,自从上次调用commit()是不可见的,从其他的数据库连接。

8 connection.rollback()

此方法会回滚任何更改数据库自上次调用commit()方法。

9 connection.close()

此方法关闭数据库连接。请注意,这并不自动调用commit()。如果你只是关闭数据库连接而不调用commit()方法首先,那么所有更改将会丢失!

10 cursor.fetchone()

这种方法提取的查询结果集的下一行,返回一个序列,或者无当没有更多的数据是可用的。

11 cursor.fetchmany([size=cursor.arraysize])

这个例程中取出下一个组的查询结果的行数,返回一个列表。当没有找到记录,返回空列表。该方法试图获取尽可能多的行所显示的大小参数。

12 cursor.fetchall()

这个例程获取所有查询结果(剩余)行,返回一个列表。空行时则返回空列表。

打开数据库连接:

import os
import sys
import psycopg2
def connectPostgreSQL():
conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
print 'connect successful!'
if __name__=='__main__':
connectPostgreSQL()

创建表操作:

import os
import sys
import psycopg2
def connectPostgreSQL():
conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
print 'connect successful!'
cursor=conn.cursor()
cursor.execute('''create table public.member(
id integer not null primary key,
name varchar(32) not null,
password varchar(32) not null,
singal varchar(128)
)''')
conn.commit()
conn.close()
print 'table public.member is created!'
if __name__=='__main__':
connectPostgreSQL()

Insert 操作:

import os
 import sys
 import psycopg2
 
 def connectPostgreSQL():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   print 'connect successful!'
   cursor=conn.cursor()
   cursor.execute('''create table public.member(
 id integer not null primary key,
 name varchar(32) not null,
 password varchar(32) not null,
 singal varchar(128)
 )''')
   conn.commit()
   conn.close()
   print 'table public.member is created!'
 def insertOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(1,'member0','password0','signal0')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(2,'member1','password1','signal1')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(3,'member2','password2','signal2')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(4,'member3','password3','signal3')")
   conn.commit()
   conn.close()
   
   print 'insert records into public.memmber successfully'
   
 if __name__=='__main__':
   #connectPostgreSQL()
insertOperate()

Select 操作:

import os
 import sys
 import psycopg2
 
 def connectPostgreSQL():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   print 'connect successful!'
   cursor=conn.cursor()
   cursor.execute('''create table public.member(
 id integer not null primary key,
 name varchar(32) not null,
 password varchar(32) not null,
 singal varchar(128)
 )''')
   conn.commit()
   conn.close()
   print 'table public.member is created!'
 
 def insertOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(1,'member0','password0','signal0')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(2,'member1','password1','signal1')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(3,'member2','password2','signal2')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(4,'member3','password3','signal3')")
   conn.commit()
   conn.close()
   
   print 'insert records into public.memmber successfully'
 
 def selectOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("select id,name,password,singal from public.member where id>2")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
   
 if __name__=='__main__':
   #connectPostgreSQL()
   #insertOperate()
   selectOperate()

结果:

Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
========== RESTART: C:\Users\Administrator\Desktop\mutilpleTest.py ==========
id= 3 ,name= member2 ,pwd= password2 ,singal= signal2 

id= 4 ,name= member3 ,pwd= password3 ,singal= signal3 

>>>

update操作:

import os
 import sys
 import psycopg2
 
 def connectPostgreSQL():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   print 'connect successful!'
   cursor=conn.cursor()
   cursor.execute('''create table public.member(
 id integer not null primary key,
 name varchar(32) not null,
 password varchar(32) not null,
 singal varchar(128)
 )''')
   conn.commit()
   conn.close()
   print 'table public.member is created!'
 
 def insertOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(1,'member0','password0','signal0')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(2,'member1','password1','signal1')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(3,'member2','password2','signal2')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(4,'member3','password3','signal3')")
   conn.commit()
   conn.close()
   
   print 'insert records into public.memmber successfully'
 
 def selectOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("select id,name,password,singal from public.member where id>2")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
 
 def updateOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("update public.member set name='update ...' where id=2")
   conn.commit()
   print "Total number of rows updated :", cursor.rowcount
 
   cursor.execute("select id,name,password,singal from public.member")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
   
 if __name__=='__main__':
   #connectPostgreSQL()
   #insertOperate()
   #selectOperate()
   updateOperate()

结果:

Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
========== RESTART: C:\Users\Administrator\Desktop\mutilpleTest.py ==========
Total number of rows updated : 1
id= 1 ,name= member0 ,pwd= password0 ,singal= signal0 

id= 3 ,name= member2 ,pwd= password2 ,singal= signal2 

id= 4 ,name= member3 ,pwd= password3 ,singal= signal3 

id= 2 ,name= update ... ,pwd= password1 ,singal= signal1 

>>>

Delete操作:

import os
 import sys
 import psycopg2
 
 def connectPostgreSQL():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   print 'connect successful!'
   cursor=conn.cursor()
   cursor.execute('''create table public.member(
 id integer not null primary key,
 name varchar(32) not null,
 password varchar(32) not null,
 singal varchar(128)
 )''')
   conn.commit()
   conn.close()
   print 'table public.member is created!'
 
 def insertOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(1,'member0','password0','signal0')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(2,'member1','password1','signal1')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(3,'member2','password2','signal2')")
   cursor.execute("insert into public.member(id,name,password,singal)\
 values(4,'member3','password3','signal3')")
   conn.commit()
   conn.close()
   
   print 'insert records into public.memmber successfully'
 
 def selectOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("select id,name,password,singal from public.member where id>2")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
 
 def updateOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")
   cursor=conn.cursor()
   cursor.execute("update public.member set name='update ...' where id=2")
   conn.commit()
   print "Total number of rows updated :", cursor.rowcount
 
   cursor.execute("select id,name,password,singal from public.member")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
 
 def deleteOperate():
   conn = psycopg2.connect(database="testdb", user="postgres", password="new.1234", host="127.0.0.1", port="5432")  
   cursor=conn.cursor()
 
   cursor.execute("select id,name,password,singal from public.member")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
 
   print 'begin delete'
   cursor.execute("delete from public.member where id=2")
   conn.commit()  
   print 'end delete'
   print "Total number of rows deleted :", cursor.rowcount
   
   cursor.execute("select id,name,password,singal from public.member")
   rows=cursor.fetchall()
   for row in rows:
     print 'id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n'
   conn.close()
   
 if __name__=='__main__':
   #connectPostgreSQL()
   #insertOperate()
   #selectOperate()
   #updateOperate()
   deleteOperate()

结果:

Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
========== RESTART: C:\Users\Administrator\Desktop\mutilpleTest.py ==========
id= 1 ,name= member0 ,pwd= password0 ,singal= signal0 

id= 3 ,name= member2 ,pwd= password2 ,singal= signal2 

id= 4 ,name= member3 ,pwd= password3 ,singal= signal3 

id= 2 ,name= update ... ,pwd= password1 ,singal= signal1 

begin delete
end delete
Total number of rows deleted : 1
id= 1 ,name= member0 ,pwd= password0 ,singal= signal0 

id= 3 ,name= member2 ,pwd= password2 ,singal= signal2 

id= 4 ,name= member3 ,pwd= password3 ,singal= signal3 

>>>

Python中用psycopg2模块操作PostgreSQL方法

Python 相关文章推荐
Python Tkinter基础控件用法
Sep 03 Python
python中ConfigParse模块的用法
Sep 29 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python实现简单http服务器
Apr 12 Python
python绘制直线的方法
Jun 30 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
python如何保证输入键入数字的方法
Aug 23 Python
opencv3/C++图像像素操作详解
Dec 10 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
Python搜索引擎实现原理和方法
Nov 27 #Python
python输入错误密码用户锁定实现方法
Nov 27 #Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 #Python
Python基于贪心算法解决背包问题示例
Nov 27 #Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 #Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 #Python
深入理解Python中range和xrange的区别
Nov 26 #Python
You might like
php学习之流程控制实现代码
2011/06/09 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jquery密码强度校验
2015/12/02 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
使用Python进行目录的对比方法
2018/11/01 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
应届生会计求职信
2013/11/11 职场文书
法律专业实习鉴定
2013/12/22 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
房产协议书范本
2014/10/18 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2015年暑期见闻
2015/07/14 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
Java数组与堆栈相关知识总结
2021/06/29 Java/Android