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求最大连续子数组的和
Jul 07 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
TensorFlow实现模型评估
Sep 07 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
python nmap实现端口扫描器教程
May 28 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
详解Python高阶函数
Aug 15 Python
Python截图并保存的具体实例
Jan 14 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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的session反序列化漏洞问题
2017/06/15 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
keras 权重保存和权重载入方式
2020/05/21 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
党员培训思想汇报
2014/01/07 职场文书
茶叶生产计划书
2014/01/10 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
读书之星事迹材料
2014/05/12 职场文书
大足石刻导游词
2015/02/02 职场文书
毕业证明书
2015/06/19 职场文书
立案决定书范文
2015/06/24 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
标准发言稿结尾
2019/07/18 职场文书
golang特有程序结构入门教程
2021/06/02 Python
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫