psycopg2笔记
建立连接
- 使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
- 使用psycopg2.connect函数获得connection对象。
- 使用connection对象创建cursor对象。
- 使用cursor对象执行sql语句提交或者回滚transaction。
- 使用cursor对象fetchone获得查询结果。
- 关闭cursor对象和connection对象。
创建数据表
过程:
- 构造建表的sql语句
- 调用psycopg2.connect()方法获得connection对象
- 调用connection.cursor()方法获得cursor对象
- 调用cursor.execute()方法执行sql语句
- 调用connection.commit方法提交事务
- 调用cursor.close()和connection.close()方法关闭连接
插入行
- 构造插入语句, 使用%s作为占位符,执行时psycopg2会用值智能替换掉占位符。可以添加RETURNING字句,来得到自动生成的字段值。
- 同创建数据表的2,3。获得connection对象和cursor对象
- 使用cursor.execute方法来插入一行,使用cursor.executemany方法来插入多行。 execute方法的第一个参数是sql语句,第二个参数是值的tuple。executemany方法的第一个参数是sql语句,第二个参数是list of tuple。
- 如果在1中使用了RETURNING子句,可以使用cursor.fetchone方法,来获得返回的自动生成字段的值。
- 同上5
- 同上6
更新数据
- 基本上和插入行相同。
- 使用cursor.rowcount属性来获得受影响的行的数目。
transaction
connection对象负责管理事务。当你第一次使用cursor.execute方法执行sql语句的时候事务开启,这以后的所有sql语句都在这个事务中执行,直到connection.commit或者connection.rollback或者del connection或者connection.close被调用,事务才结束。
一个简单的select语句可能会开启一个事务并且对相应的表格加锁,所以如果你是在开发一个长时间运行的应用,而且一个连接长时间不使用,那么你需要调用commit或者rollback方法结束事务,避免不必要的问题。
使用connection.autocommit来控制事务
从psycopg2.5开始,connection和cursor都是context manager对象,可以在with ... as ...语句中使用。值得注意的是,离开with语句后,connection对象不会被close,它只是结束提交或者回滚事务。所以可以在多个with语句中使用connection对象。
调用存储过程
- 使用cursor.callproc('function name', tuple), 函数的第一个参数是存储过程的名字,函数的第二个参数是实参tuple。这个调用和cursor.execute('select * from functionanme(%s)', tuple)相同。
- 可以使用cursor.fetchone, cursor.fetchmany, cursor.fetchall来获得返回值。
blob对象
- 使用psycopg2.Binary对象和postgresql的BYTEA数据类型对应,用于存储二进制数据。
以下这个例子演示了二进制数据的存取。
config.py
def config():db_conn_config = {'host': 'localhost','user': 'postgres','password': '','dbname': 'test','port': 5432}return db_conn_config
- write_blob.py
import psycopg2
from config import configdef write_blob(path_to_file):""" insert a BLOB into a table """conn = Nonetry:# read data from a picturedrawing = open(path_to_file, 'rb').read()# read database configurationparams = config()# connect to the PostgresQL databaseconn = psycopg2.connect(**params)# create a new cursor objectcur = conn.cursor()# execute the INSERT statementcur.execute("INSERT INTO parts_drawings(drawing_data,name) " +"VALUES(%s,%s)",(psycopg2.Binary(drawing), path_to_file))# commit the changes to the databaseconn.commit()# close the communication with the PostgresQL databasecur.close()except (Exception, psycopg2.DatabaseError) as error:print(error)finally:if conn is not None:conn.close()if __name__ == '__main__':write_blob('./1.jpg')
- read_blob.py
from config import config
import psycopg2
def read_blob(id, path_to_dir):""" read BLOB data from a table """conn = Nonetry:# read database configurationparams = config()# connect to the PostgresQL databaseconn = psycopg2.connect(**params)# create a new cursor objectcur = conn.cursor()# execute the SELECT statementcur.execute(""" SELECT *FROM parts_drawings WHERE id = %s """,(id,))blob = cur.fetchone()open(path_to_dir + str(blob[0]) + '.jpg', 'wb').write(blob[1])# close the communication with the PostgresQL databasecur.close()except (Exception, psycopg2.DatabaseError) as error:print(error)finally:if conn is not None:conn.close()if __name__ == '__main__':read_blob(1, './img/')
查询数据
- 查询数据和其它操作类似。
- 可以使用cursor.fetchone, cursor.fetchall, cursor.fetchmany(size=cursor.arraysize)方法来返回查询结果。fetchone返回一个tuple或者None, fetchall返回一个list of tuple,如果没有结果则返回一个空的tuple。fetchmany返回list of tuple, list的长度由size参数决定,size的默认值是cursor.arraysize, 如果没有结果可以返回,那么返回一个空的list。
删除数据
- 和更新数据类似
- 可以使用cursor.rowcount来获得删除的行数目。
转载于:https://www.cnblogs.com/hao-ming/p/7215050.html
psycopg2笔记相关推荐
- linux psycopg2,Ubuntu安装psycopg2笔记
在Windows上和Ubuntu Linux上安装psycopg2都遇到了点小插曲,记录如下 Windows下: 1. 点击这里前往官网下载源代码 2. 解压 3. 运行python setup.py ...
- python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目
文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...
- 《Python 数据科学实践指南》读书笔记
文章提纲 全书总评 C01.Python 介绍 Python 版本 Python 解释器 Python 之禅 C02.Python 基础知识 基础知识 流程控制: 函数及异常 函数: 异常 字符串 获 ...
- python随身笔记
笔记 类中添加静态方法 机器学习--决策树 工程优化 集合算法 正向激励 随机深林预测 常用Python函数 keras 笔记 Python3.7 和 3.6 使用pandas的问题 Python装饰 ...
- 好全面的python笔记,那我就笑纳了
注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法 Python的特色 1.简单 2.易学 3.免费.开源 4.高层语言: 封装内存管理等 5.可移植性: 程序如果避免使用依赖于系统的特性 ...
- PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL
目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...
- 【读书笔记】知易行难,多实践
前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...
- 【运维学习笔记】生命不息,搞事开始。。。
001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...
- SSAN 关系抽取 论文笔记
20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...
最新文章
- Pytorch+Text-CNN+Word2vec+电影评论情感分析实战
- Nature突破:首个比头发丝还细的机器人诞生了!可用针头注射入人体
- linux 下面安装 .sh 格式的软件
- 洛谷P1433 吃奶酪【dfs】【剪枝】
- 【正则表达式】值匹配汉字的正字表达式
- UITableView 顶部空白总结
- 深圳坪山,中国首个全区全域全车无人的RoboTaxi运营区
- 使用POI将doc文件转换为html
- input select 值得绑定与获取
- c语言向自定数组_C语言怎么向自定义函数中传入一个数组,处理完再返回新的数组?...
- 用cglib生成的代理类取不到注解的问题
- 大气的酒店商务企业网站模板
- 在c语言中有函数leapyear定义如下,职业教育概论——职业教育的发展历史超星尔雅答案题库...
- 在线文本比较工具(对比工具)
- 实验操作:ELK日志分析系统--------------------------未完待续
- 拉卡拉前三季度净利润7.35亿元 继续保持高速增长态势
- 路由器连接显示主服务器dns,路由器主dns服务器怎么设置 - 卡饭网
- 初识STM32---基于STM32的室内温湿度检测
- tableau 自定义版块地图
- 【菜鸡的自动化学习之旅】《电力电子技术》学习笔记1 ———— 电力电子器件
热门文章
- 计算机精准教学,“精准教学”一定要平板电脑?看看他们如何因陋就简,揭开精准教学的神秘面纱...
- 不同内核浏览器之间的差异以及浏览器渲染
- 黑马基础 20 IO流
- 送给自己人生的第一份生日礼物——Java小游戏!
- 华为p20支持手机云闪付吗_华为手机怎么用云闪付 支持的机型有哪些
- Maven镜像 阿里云mirror如何使用
- 【Zbrush干货】学习游戏建模必须知道的Zbrush干货分享,ZBrush快捷键大全
- FTP主动被动介绍,相关协议整理
- Python爬虫爬取豆瓣不同分类书籍详细信息
- css中indent是什么意思,css中text-indent用法及与padding的区别详解