建立连接

  1. 使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
  2. 使用psycopg2.connect函数获得connection对象。
  3. 使用connection对象创建cursor对象。
  4. 使用cursor对象执行sql语句提交或者回滚transaction。
  5. 使用cursor对象fetchone获得查询结果。
  6. 关闭cursor对象和connection对象。

创建数据表

过程:

  1. 构造建表的sql语句
  2. 调用psycopg2.connect()方法获得connection对象
  3. 调用connection.cursor()方法获得cursor对象
  4. 调用cursor.execute()方法执行sql语句
  5. 调用connection.commit方法提交事务
  6. 调用cursor.close()和connection.close()方法关闭连接

插入行

  1. 构造插入语句, 使用%s作为占位符,执行时psycopg2会用值智能替换掉占位符。可以添加RETURNING字句,来得到自动生成的字段值。
  2. 创建数据表的2,3。获得connection对象和cursor对象
  3. 使用cursor.execute方法来插入一行,使用cursor.executemany方法来插入多行。 execute方法的第一个参数是sql语句,第二个参数是值的tuple。executemany方法的第一个参数是sql语句,第二个参数是list of tuple。
  4. 如果在1中使用了RETURNING子句,可以使用cursor.fetchone方法,来获得返回的自动生成字段的值。
  5. 同上5
  6. 同上6

更新数据

  1. 基本上和插入行相同。
  2. 使用cursor.rowcount属性来获得受影响的行的数目。

transaction

  1. connection对象负责管理事务。当你第一次使用cursor.execute方法执行sql语句的时候事务开启,这以后的所有sql语句都在这个事务中执行,直到connection.commit或者connection.rollback或者del connection或者connection.close被调用,事务才结束。

  2. 一个简单的select语句可能会开启一个事务并且对相应的表格加锁,所以如果你是在开发一个长时间运行的应用,而且一个连接长时间不使用,那么你需要调用commit或者rollback方法结束事务,避免不必要的问题。

  3. 使用connection.autocommit来控制事务

  4. 从psycopg2.5开始,connection和cursor都是context manager对象,可以在with ... as ...语句中使用。值得注意的是,离开with语句后,connection对象不会被close,它只是结束提交或者回滚事务。所以可以在多个with语句中使用connection对象。

调用存储过程

  1. 使用cursor.callproc('function name', tuple), 函数的第一个参数是存储过程的名字,函数的第二个参数是实参tuple。这个调用和cursor.execute('select * from functionanme(%s)', tuple)相同。
  2. 可以使用cursor.fetchone, cursor.fetchmany, cursor.fetchall来获得返回值。

blob对象

  1. 使用psycopg2.Binary对象和postgresql的BYTEA数据类型对应,用于存储二进制数据。
  2. 以下这个例子演示了二进制数据的存取。

  3. 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/')

查询数据

  1. 查询数据和其它操作类似。
  2. 可以使用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。

删除数据

  1. 和更新数据类似
  2. 可以使用cursor.rowcount来获得删除的行数目。

转载于:https://www.cnblogs.com/hao-ming/p/7215050.html

psycopg2笔记相关推荐

  1. linux psycopg2,Ubuntu安装psycopg2笔记

    在Windows上和Ubuntu Linux上安装psycopg2都遇到了点小插曲,记录如下 Windows下: 1. 点击这里前往官网下载源代码 2. 解压 3. 运行python setup.py ...

  2. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

  3. 《Python 数据科学实践指南》读书笔记

    文章提纲 全书总评 C01.Python 介绍 Python 版本 Python 解释器 Python 之禅 C02.Python 基础知识 基础知识 流程控制: 函数及异常 函数: 异常 字符串 获 ...

  4. python随身笔记

    笔记 类中添加静态方法 机器学习--决策树 工程优化 集合算法 正向激励 随机深林预测 常用Python函数 keras 笔记 Python3.7 和 3.6 使用pandas的问题 Python装饰 ...

  5. 好全面的python笔记,那我就笑纳了

    注:本笔记基于python2.6而编辑,尽量的偏向3.x的语法 Python的特色 1.简单 2.易学 3.免费.开源 4.高层语言: 封装内存管理等 5.可移植性: 程序如果避免使用依赖于系统的特性 ...

  6. PostgreSQL学习笔记(更新ing)+c# 使用ef连接数据库postgreSQL

    目录 PostgreSQL学习笔记 一.PostgreSQL创建.删除数据库(表).架构 1.创建数据库 CREATE DATABASE 2.查看数据库 3.删除数据库 4.创建表 5.删除表 6.架 ...

  7. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  8. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  9. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

最新文章

  1. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战
  2. Nature突破:首个比头发丝还细的机器人诞生了!可用针头注射入人体
  3. linux 下面安装 .sh 格式的软件
  4. 洛谷P1433 吃奶酪【dfs】【剪枝】
  5. 【正则表达式】值匹配汉字的正字表达式
  6. UITableView 顶部空白总结
  7. 深圳坪山,中国首个全区全域全车无人的RoboTaxi运营区
  8. 使用POI将doc文件转换为html
  9. input select 值得绑定与获取
  10. c语言向自定数组_C语言怎么向自定义函数中传入一个数组,处理完再返回新的数组?...
  11. 用cglib生成的代理类取不到注解的问题
  12. 大气的酒店商务企业网站模板
  13. 在c语言中有函数leapyear定义如下,职业教育概论——职业教育的发展历史超星尔雅答案题库...
  14. 在线文本比较工具(对比工具)
  15. 实验操作:ELK日志分析系统--------------------------未完待续
  16. 拉卡拉前三季度净利润7.35亿元 继续保持高速增长态势
  17. 路由器连接显示主服务器dns,路由器主dns服务器怎么设置 - 卡饭网
  18. 初识STM32---基于STM32的室内温湿度检测
  19. tableau 自定义版块地图
  20. 【菜鸡的自动化学习之旅】《电力电子技术》学习笔记1 ———— 电力电子器件

热门文章

  1. 计算机精准教学,“精准教学”一定要平板电脑?看看他们如何因陋就简,揭开精准教学的神秘面纱...
  2. 不同内核浏览器之间的差异以及浏览器渲染
  3. 黑马基础 20 IO流
  4. 送给自己人生的第一份生日礼物——Java小游戏!
  5. 华为p20支持手机云闪付吗_华为手机怎么用云闪付 支持的机型有哪些
  6. Maven镜像 阿里云mirror如何使用
  7. 【Zbrush干货】学习游戏建模必须知道的Zbrush干货分享,ZBrush快捷键大全
  8. FTP主动被动介绍,相关协议整理
  9. Python爬虫爬取豆瓣不同分类书籍详细信息
  10. css中indent是什么意思,css中text-indent用法及与padding的区别详解