【转】 http://daigong.iteye.com/blog/901160

Python如果要操作Postgresql,需要一个API,这就需要Psycopg2

1. 链接PostgreSQL并设定Cursor

import psycopg2

import psycopg2.extras

conn = psycopg2.connect(host=’localhost’, port=5432, user=’postgres’, password=’postgres’, database=’test’) # connect()也可以使用一个大的字符串参数, 比如”host=localhost port=5432 user=postgres password=postgres dbname=test”

cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) #这里创建的是一个字典Cursor, 这样返回的数据, 都是字典的形式, 方便使用

2. 执行SQL脚本

cursor.execute(‘SELECT * FROM test WHERE id > %s;’, (5,))

这里的使用有一些奇怪, 有几个地方需要说明. 首先, sql脚本必须以;结尾, 不可以省略. 其次, 不管sql中有几个参数, 都需要用%s代替, 只有%s, 不管值是字符还是数字, 一律%s. 最后, 第二个参数中, 一定要传如元祖, 哪怕只有一个元素, 像我刚才的例子一样, (5)这样是不行的.

3. 得到查询结果

psycopg2提供了3种得到结果的方式, fetchone(), fetchall()和fetchmany(). fetchone()返回一条结果, 如果找不到, 返回None. fetchall()返回所有结果, 如果找不到, 返回空list. fetchmany接收1个参数, 即返回的结果数, 每次调用, 游标向后移, 找不到了, 就返回空list.

4. 查看生成的sql脚本

cursor.mogrify(‘SELECT * FROM test WHERE a = %s AND b = %s;’, (‘a’, ‘b’))

mogrify()函数会返回生成的sql脚本, 用以查看生成的sql是否正确.

5. 查看上一条执行的脚本

cursor.query

这是一个只读的属性, 用以查看上次执行的sql脚本.

6. 插入数据

执行完INSERT, UPDATE, DELETE这样的sql脚本后, 需要conn.commit()提交一下, 才会把数据提交到数据库当中. 切记.

这里有几个小技巧, 大家肯定会用的上的.

1. 取得最后插入的记录的ID

在INSERT的语句最后面加上RETURNING id即可, 比如:

cursor.execute(‘INSERT INTO test (a, b) VALUES (%s, %s) RETURNING id;’, (‘a’, ‘b’))

item = cursor.fetchone()

print item[0] #这里就是刚才插入的记录的ID了

最新文章

  1. CDCE913产生任意频率
  2. Java常用的技术网站
  3. UGUI全面实践教程
  4. PHPUnit单元测试中类protected/private方法测试
  5. AAL template: ROI to brain lobe
  6. mac os安装基本的install环境,命令行安装软件
  7. centos 7.0 下触发器乱码的解决
  8. php Calender(日历)代码
  9. tcp协议中mss的理解
  10. 解析json数据总结
  11. Ubuntu将软件(Sublime Text 2为例)锁定到启动器
  12. using 1.7 requires using android build tools version 19 or later
  13. salesforce 零基础学习(六十八)http callout test class写法
  14. C#接口--C#基础
  15. bzoj 4919: [Lydsy六月月赛]大根堆
  16. cocos2dx深度检测与Zorder
  17. 使用 functional interface 和 lambda 表达式来优化代码
  18. 关于使用format()方法格式化字符串,读这一篇就够了!
  19. P1041 传染病控制(dfs)
  20. 360doc个人图书馆解决复制问题

热门文章

  1. bootstrap-multiselect 设置单选无效(设置单选依然是复选框)
  2. SpringCloud 教程 (三)高可用的服务注册中心
  3. 全球DC主机交流
  4. Spring_Boot 简单例子
  5. native-echarts 组件封装
  6. The import org.apache.hadoop.mapreduce cannot be resolved
  7. LongAdder 源码分析
  8. leetcode 258. 各位相加 (python)
  9. unity不规则按钮解决方案
  10. 前端005/React生命周期