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中尝试多线程编程的一个简明例子
Apr 07 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
python进行两个表格对比的方法
Jun 27 Python
python安装twisted的问题解析
Aug 21 Python
python随机数分布random测试
Aug 27 Python
Python3实现定时任务的四种方式
Jun 03 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
Python实现打包成库供别的模块调用
Jul 13 Python
Python 如何定义匿名或内联函数
Aug 01 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
Python语言内置数据类型
Feb 24 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
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
2017/09/02 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
vue 组件简介
2020/07/31 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python编码类型转换方法详解
2016/07/01 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
python config文件的读写操作示例
2019/09/27 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
2014年向国旗敬礼活动总结
2014/09/27 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
婚宴主持词
2015/06/30 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
JavaScript继承的三种方法实例
2021/05/12 Javascript
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Golang并发工具Singleflight
2022/05/06 Golang