python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2
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相关推荐
- python数据库实例_Python操作MySQL数据库9个实用实例
用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...
- python 销售数据分析输出表格_Python实现将数据库一键导出为Excel表格的实例
Python实现将数据库一键导出为Excel表格的实例 下面小编就为大家带来一篇Python实现将数据库一键导出为Excel表格的实例.小编觉得挺不错的,现在就分享给大家, 数据库数据导出为excel ...
- python多表联合查询_Python MySQL 多表查询
Python MySQL 多表查询 两个或更多表查询 两个或多个表基于关联字段联全查询, 使用JOIN语句. 如下是"users"表和"products"表: ...
- php访问数据库例子,PHP访问MSSQL数据库(实例代码)
本例子只作为简单的引导,实现一个简单的查询: php中mssql数据库简单查询完整实例 //说明:测试的时候是连接的是远程的mssql数据库,没有在本机运行 //初始化mssql数据库连接,分别是 主 ...
- mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句
实验十报告 创建视图 实验目的 1.掌握创建视图的SQL语句的用法. 2.掌握使用企业管管理器创建视图的方法. 3.掌握使用创建视图向导创建视图的方法. 4.掌握查看视图的系统存储过程的用法. 5.掌 ...
- java数据库查询语句题_数据库查询语句面试
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- ios mysql数据库查询语句_ios fmdb数据库查询语句
iOS开发数据库篇-FMDB简单介绍 iOS开发数据库篇-FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语 ...
- python postgresql跨数据库操作_python 操作postgres数据库
1.使用psycopg2连接postgresql,首先需要安装python psycopg2依赖包 pip install psycopg2 2.数据库连接 import psycopg2 try: ...
- python调用数据库判断_python 访问数据库 笔记
1 使用dbm持久字典 存储名称.值对,保存在磁盘上,键和值都必须是字符串类型 不同dbm模块创建的文件是不兼容的.如果使用某个dbm模块创建一个dbm持久字典,那么必须使用相同的模块来读取数据. d ...
最新文章
- Android P FAQ第一弹:非SDK管控特性
- 浅谈:数据结构之单链表,java代码演示单链表
- Android 系统性能优化(38)---Android内存优化之二:MAT使用进阶
- 一、docker临时记录
- MySQL语法中有哪些可以利用的漏洞?
- 浅谈Android数据库DBFlow
- 运行make_datafiles的过程
- idea 2017 常用图标
- 洛谷P1141 01迷宫【bfs】
- java 定时关机_java实现电脑定时关机的方法
- c语言编译器masm,汇编环境搭建 -- MASM32
- 网易云音乐显示服务器发生错误,网易云音乐加载失败怎么回事 网易云音乐出现加载失败的有效解决方法...
- 画法几何及工程制图考试卷A卷
- 【U8+】修改查询凭证列表中的系统名
- webshell流量隐蔽CS和MSF联动
- 微信小程序豆瓣电影学习知识总结
- 获取焦点(onFocus)和失去焦点(onBlur) (js)
- Fortran矩阵运算
- linux electron-**r 打开正常,配置正常,却用不了
- 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)
热门文章
- 自研redis sdk支持自动dns切换(附源码)
- SQL Server CLR 启用、部署
- 电子信息工程跨考计算机武大,往届从材料跨考武大085208电子与通信工程初试303分 - 考研 - 小木虫 - 学术 科研 互动社区...
- HandlerInterceptor拦截器的使用
- 什么是框架?spring mvc框架
- 第9章 中断和动态时钟显示
- vscode私钥设置_VSCode远程开发配置指南
- 掘金浏览器插件安装图文教程
- implicit request ?
- Visual Studio 2005 Tip:编辑项目文件