Python操作PostgreSql数据库的方法(基本的增删改查)


Posted in Python onDecember 29, 2020

Python操作PostgreSql数据库(基本的增删改查)

操作数据库最快的方式当然是直接用使用SQL语言直接对数据库进行操作,但是偶尔我们也会碰到在代码中操作数据库的情况,我们可能用ORM类的库对数控库进行操作,但是当需要操作大量的数据时,ORM的数据显的太慢了。在python中,遇到这样的情况,我推荐使用psycopg2操作postgresql数据库

psycopg2

官方文档传送门: http://initd.org/psycopg/docs/index.html

简单的增删改查

连接

连接pg并创建表

PG_SQL_LOCAL = {
 'database': 'postgres',
 'user': 'postgres',
 'password': "8dsa581",
 # 'host':'10.27.78.1',
 'host': 'localhost'
}

def connectPostgreSQL():
 conn = psycopg2.connect(**PG_SQL_LOCAL)
 print('connect successful!')
 cursor = conn.cursor()
 cursor.execute('''
 create table public.members(
 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(**PG_SQL_LOCAL)
 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')")
 row = conn.fetchone()
 print(row)
 conn.commit()
 conn.close()

 print('insert records into public.memmber successfully')

  • fetchall() 一次性获取所有数据
  • fetchmany() 一次值提取2000条数据(使用服务端的游标)
def selectOperate():
 conn = psycopg2.connect(**PG_SQL_LOCAL)
 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],)

 while True:
 rows = cursor.fetchmany(2000)
 if not rows:
  break
 for row in rows:
  # print('id=', row['id'], ',name=', row['name'], ',pwd=', row['pwd'], ',singal=', row['singal'],)
  rid,name,pwd,singal = row
  print(rid,name,pwd,singal)
  # print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3], )
 conn.close()

更新数据

def updateOperate():
 conn = psycopg2.connect(**PG_SQL_LOCAL)
 cursor=conn.cursor()
 result = cursor.execute("update public.member set name='member X' where id=3")
 print(result)
 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(**PG_SQL_LOCAL)
 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()

补充,增加的字段带有时间格式

带有时间格式是,只需要传入时间格式的字符串(‘2017-05-27')即可,PG会自动识别

cur.execute("INSERT INTO Employee "
  "VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")
# 查询数据
cur.execute("SELECT * FROM Employee")
rows = cur.fetchall()
for row in rows:
 print('name=' + str(row[0]) + ' address=' + str(row[1]) +
  ' age=' + str(row[2]) + ' date=' + str(row[3]), type(row[3]))

 # 插入数据
 sql = """INSERT INTO Employees VALUES(%s, %s, %s,%s) """
 var = []
 var.append([row[0], row[1], row[2], row[3]])
 cur.executemany(sql, var)

# 提交事务
conn.commit()

# 关闭连接
conn.close()

到此这篇关于Python操作PostgreSql数据库(基本的增删改查)的文章就介绍到这了,更多相关Python操作PostgreSql数据库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python抓取网页时字符集转换问题处理方案分享
Jun 19 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
python与字符编码问题
May 24 Python
keras 读取多标签图像数据方式
Jun 12 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
Python中相见恨晚的技巧
Apr 13 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
python中uuid模块实例浅析
Dec 29 #Python
python中pickle模块浅析
Dec 29 #Python
vue.js刷新当前页面的实例讲解
Dec 29 #Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 #Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 #Python
Python基于mediainfo批量重命名图片文件
Dec 29 #Python
用python批量下载apk
Dec 29 #Python
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
2017/11/03 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
Python中Collection的使用小技巧
2014/08/18 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python程序需要编译吗
2020/06/19 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
介绍一下grep命令的使用
2015/06/12 面试题
GC是什么?为什么要有GC?
2013/12/08 面试题
自我鉴定注意事项
2014/01/19 职场文书
生物制药自我鉴定
2014/01/25 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
财会专业大学生求职信
2014/09/26 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
小学科学课教学反思
2016/02/23 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js