python访问PostgreSQL数据库之连接库Psycopg2

作者:佣工7001

由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库。通过搜索,锁定两个候选库:一个是py-postgresql,一个是Psycopg2。简单的看了一下py-postgresql的文档,发现它并非基于DB-api接口的,而是使用postgresql的API,这可不是我想要的,只好排除。剩下就是这个名字很怪异的Psycopg,看了下,它遵循DB-API规范,好了就选它了,下载安装,试用,老规矩,记录下来要点备忘。

一、安装

由于我开发环境在windows下,所以我下载的是window下的一键安装版本,安装过程非常容易没啥可说的。

二、使用

面的简单使用流程是官网的文档中的例子,看上去是这么的熟悉,是个不错的开始。

# 引入psycopg2库

>>> import psycopg2

# 连接到数据库test

>>> conn = psycopg2.connect("dbname=test user=postgres")

# 建立Cursor对象

>>> cur = conn.cursor()

# 执行sql命令:创建一个新表test

>>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")

# 传递数据到语句中形参中,让Psycopg处理正确的转换问题(可以避免sql注入)

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",

... (100, "abc'def"))

# 插叙数据,并获取结果

>>> cur.execute("SELECT * FROM test;")

>>> cur.fetchone()

(1, 100, "abc'def")

# 提交数据改变

>>> conn.commit()

# 关闭Cursor对象和连接对象

>>> cur.close()

>>> conn.close()

下面就要看psycopg是否能完全满足我的需求:

(-)建立数据库连接psycopg2中建立数据库连接需要使用connect方法,方法形式如下:psycopg2.connect(dsn or params [, connection_factory] [, async=0])

返回值是一个Connection对象。1,可以使用DSN连接数据库,也就是数据源名称字符串,例如conn = psycopg2.connect("dbname=test user=postgres password=secret")2,也可以使用命名参数进行连接。conn = psycopg2.connect(database="test", user="postgres", password="secret")

基本的连接参数有:

dbname – 数据库名(仅在DSN中使用有效)

database – 数据库名(仅在使用命名参数时可用)

user – 连接数据所用的数据库用户名

password – 用户的密码

host – 数据库所在主机名或IP地址(默认为本机)

port – 端口号(默认为5432 )

还有其他一些参数,请参见PostgreSQL官方文档 list of supported parameters。另外需要注意的是,同样的参数也可以通过环境变量的形式传递到客户端库。

3,使用connection_factory参数,可以指定自定义的Connection连接类,详情查看官方文档 Connection and cursor factories 。

4,设置参数async=1,则会创建一个异步的连接对象。具体参见官方文档Asynchronous support 了解异步的优缺点。

(二)创建字典形式的Cursor对象

简单的创建Cursor对象十分简单,但是这不能满足我的需求。DictCursor这个才是我所需要的,也就是在创建Cursor的时候给出参数cursor_factory

import psycopg2

#为了使用DictCursor

import psycopg2.extrascursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)使用过dbapi编程的,这个好处你懂的

(三)使用命名参数传递数据

我的另一个需求就是,执行sql语句时,最好使用命名参数传递数据,幸运的是psycopg2也是支持命名参数的!psycopg中命名参数的形式是:【%(argname)s】,注意在中括号中的内容就是命名参数要求的形式,其中argname是你起的参数名称,其他的百分号小括号以及小括号后面的s,照写就是。

使用命名参数的好处就是,你不用考虑传递数据的顺序,可以使用字典传递数据(注意字典的key,应该等于上面所说的argname):

>>> cur.execute(

... """INSERT INTO some_table (an_int, a_date, another_date, a_string)

... VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""",

... {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})

python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2相关推荐

  1. python数据库实例_Python操作MySQL数据库9个实用实例

    用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...

  2. python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例

    Python实现将数据库一键导出为Excel表格的实例 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例.小编觉得挺不错的,现在就分享给大家, 数据库数据导出为excel ...

  3. python多表联合查询_Python MySQL 多表查询

    Python MySQL 多表查询 两个或更多表查询 两个或多个表基于关联字段联全查询, 使用JOIN语句. 如下是"users"表和"products"表: ...

  4. php访问数据库例子,PHP访问MSSQL数据库(实例代码)

    本例子只作为简单的引导,实现一个简单的查询: php中mssql数据库简单查询完整实例 //说明:测试的时候是连接的是远程的mssql数据库,没有在本机运行 //初始化mssql数据库连接,分别是 主 ...

  5. mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句

    实验十报告 创建视图 实验目的 1.掌握创建视图的SQL语句的用法. 2.掌握使用企业管管理器创建视图的方法. 3.掌握使用创建视图向导创建视图的方法. 4.掌握查看视图的系统存储过程的用法. 5.掌 ...

  6. java数据库查询语句题_数据库查询语句面试

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  7. ios mysql数据库查询语句_ios fmdb数据库查询语句

    iOS开发数据库篇-FMDB简单介绍 iOS开发数据库篇-FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语 ...

  8. python postgresql跨数据库操作_python 操作postgres数据库

    1.使用psycopg2连接postgresql,首先需要安装python psycopg2依赖包 pip install psycopg2 2.数据库连接 import psycopg2 try: ...

  9. python调用数据库判断_python 访问数据库 笔记

    1 使用dbm持久字典 存储名称.值对,保存在磁盘上,键和值都必须是字符串类型 不同dbm模块创建的文件是不兼容的.如果使用某个dbm模块创建一个dbm持久字典,那么必须使用相同的模块来读取数据. d ...

最新文章

  1. Android P FAQ第一弹:非SDK管控特性
  2. 浅谈:数据结构之单链表,java代码演示单链表
  3. Android 系统性能优化(38)---Android内存优化之二:MAT使用进阶
  4. 一、docker临时记录
  5. MySQL语法中有哪些可以利用的漏洞?
  6. 浅谈Android数据库DBFlow
  7. 运行make_datafiles的过程
  8. idea 2017 常用图标
  9. 洛谷P1141 01迷宫【bfs】
  10. java 定时关机_java实现电脑定时关机的方法
  11. c语言编译器masm,汇编环境搭建 -- MASM32
  12. 网易云音乐显示服务器发生错误,网易云音乐加载失败怎么回事 网易云音乐出现加载失败的有效解决方法...
  13. 画法几何及工程制图考试卷A卷
  14. 【U8+】修改查询凭证列表中的系统名
  15. webshell流量隐蔽CS和MSF联动
  16. 微信小程序豆瓣电影学习知识总结
  17. 获取焦点(onFocus)和失去焦点(onBlur) (js)
  18. Fortran矩阵运算
  19. linux electron-**r 打开正常,配置正常,却用不了
  20. 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)

热门文章

  1. 自研redis sdk支持自动dns切换(附源码)
  2. SQL Server CLR 启用、部署
  3. 电子信息工程跨考计算机武大,往届从材料跨考武大085208电子与通信工程初试303分 - 考研 - 小木虫 - 学术 科研 互动社区...
  4. HandlerInterceptor拦截器的使用
  5. 什么是框架?spring mvc框架
  6. 第9章 中断和动态时钟显示
  7. vscode私钥设置_VSCode远程开发配置指南
  8. 掘金浏览器插件安装图文教程
  9. implicit request ?
  10. Visual Studio 2005 Tip:编辑项目文件