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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
解决python 上传图片限制格式问题
Oct 30 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
Pytorch之parameters的使用
Dec 31 Python
Python根据指定文件生成XML的方法
Jun 29 Python
python 实用工具状态机transitions
Nov 21 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
用python计算文件的MD5值
Dec 23 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
PHP中用hash实现的数组
2011/07/17 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
js 图片等比例缩放代码
2010/05/13 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JS简单获取日期相差天数的方法
2017/04/24 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
Python中用Spark模块的使用教程
2015/04/13 Python
python简单实现基数排序算法
2015/05/16 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
你应该知道的python列表去重方法
2017/01/17 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
会计主管竞聘书
2015/09/15 职场文书
同学联谊会邀请函
2019/06/24 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android