python使用psycopg2

psycopg2 点击可查看文档



在使用ORM之前,一直在用psycopg2去操作数据库。原因在于比较喜欢写原生的sql语句,虽然开发速度比使用ORM慢,但是自我感觉可靠,而且在一些复杂sql时候更方便(不用处理里面的关系映射,这非常不好理解, 也可能是自己太笨了-_-)。然而也遇到一些问题,使用fetchall()方法或者fetchone()方法获取的数据的到的结果往往是一个元组。只能通过索引获取相应的数据,相比字典可操作行相对较低,因为不知道什么时候获取字段就可能增加,而获取索引就会相应的改变。

  我之前的处理方法是这样的

data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in cursor.fetchall()]

在仔细查看文档发现,其实psycopg2已经有这样的处理了, 只需要使用cursor_factory=psycopg2.extras.RealDictCursor参数就可以了

p,li { white-space: pre-wrap }

贴上代码,欢迎批评指正~

# -*-coding: utf-8 -*-
from flask import current_app

import psycopg2
import psycopg2.extras
class DbModel(object):

    def __init__(self, autocommit=True):
        self.conn = psycopg2.connect(host=current_app.config[‘HOST‘],
                                port=current_app.config[‘PORT‘],
                                user=current_app.config[‘USER‘],
                                password=current_app.config[‘PASSWORD‘],
                                database=current_app.config[‘DATABASE‘])
        #是否执行后立即提交,默认为True;如果应用场景中需要使用事务,设置为False。在最后执行commit()方法或者rollback()方法
        self.autocommit = autocommit
        self.cur = self.conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)

    def getOne(self, sql=‘‘,data=()):
        self.cur.execute(sql, data)
        self.data = self.cur.fetchone()
        return self.data

    def getAll(self, sql=‘‘, data=()):
        self.cur.execute(sql, data)
        self.data = self.cur.fetchall()
        return self.data

    def writeDb(self, sql=‘‘, data=()):
        self.cur.execute(sql, data)
        self.data = self.cur.rowcount
        if self.autocommit:
            self.commit()
        return self.data

    def writeGetId(self, sql=‘‘, data=()):
        self.cur.execute(sql, data)
        self.data = self.cur.fetchone()
        if self.autocommit:
            self.commit()
        return self.data

    def getSql(self, sql="", data=()):
        return self.cur.mogrify(sql, data)

    def commit(self):
        self.conn.commit()
        self.closeall()

    def closeall(self):
        self.cur.close()
        self.conn.close()

附上基本的使用方法

import DbModel
    sql = ‘SELECT * FROM company WHERE mobileno=%s;‘
    parms = (‘18611111111‘,)  #如果参数是只有一个元素的元组,逗号必须;字典方式传递参数,请看文档
    data = DbModel().getAll(sql, parms)
    print data

    #postgres returning id 可以返回刚刚执行语句的id
    sql = "UPDATE company SET name=%s WHERE mobileno=%s RETURNING id;"
    parms = (‘测试一下‘, ‘18611111111‘)
    data = DbModel().writeGetId(sql, parms)
    print data

p,li { white-space: pre-wrap }

一些其他的使用方法。偶尔会用到的

1,sql语句中in的使用

ids = [10, 20, 30]
cur.execute("SELECT * FROM data WHERE id = ANY(%s);", (ids,))

2,重要提示,防止sql注入

Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.

p,li { white-space: pre-wrap }

就是说,永远不要用python字符串的加号把语句和参数连起来去执行

p,li { white-space: pre-wrap }
p,li { white-space: pre-wrap }
p,li { white-space: pre-wrap }

时间: 2024-10-14 23:50:15

python使用psycopg2的相关文章

python安装psycopg2

vim ~/.bash_profile export PATH=/Applications/Postgres.app/Contents/Versions/9.4/bin/:$PATH pip install psycopg2

python 操作PostgreSQL

pip install psycopg Python psycopg2 模块APIs 以下是psycopg2的重要的的模块例程可以满足Python程序与PostgreSQL数据库的工作. S.N. API & 描述 1 psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port=&quo

PostgreSQL连接python,postgresql在python 连接,创建表,创建表内容,插入操作,选择操作,更新操作,删除操作。

安装 PostgreSQL可以用Python psycopg2模块集成. sycopg2是Python编程语言的PostgreSQL数据库的适配器. 其程序代码少,速度快,稳定.不需要单独安装这个模块,因为它默认情况下被运往随着Python版本在2.5.x一起的.如果不把它安装在机器上,然后可以使用yum命令安装它,如下所示: $yum install python-psycopg2 要使用psycopg2的模块,首先必须创建一个Connection对象,它表示数据库然后再可以选择创建游标对象,

Python 操作 PostgreSQL 数据库

我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成. sycopg2是用于Python编程语言的PostgreSQL数据库适配器. psycopg2是非常小,快速,稳定的. 您不需要单独安装此模块,因为默认情况下它会随着Python 2.5.x版本一起发布. pip3 install python-psycopg2pip3 install psycopg2-binary 连接到数据库 以下Python代码显示了如何连接到现有的数据库. 如果数

如何使用Python操纵Postgres数据库

pip install psycopg2 psycopg2-binary #!/usr/bin/python import psycopg2conn = psycopg2.connect(database="test", user="postgres", password="postgres", host="10.200.22.110", port="5432")print "Opened dat

如何让本地程序调用并处理基于Django所开发网站的数据库

Django-基于Python的Web开发架构,拥有与SQL查询语句完全分离的数据库处理机制,它可以让不懂SQL语法的开发人员轻松处理数据库内容(包括insert.delete.update等等常用功能). 该文档的需求出发点为: 当有web应用的后台数据需要批量更新时,通常的解决方案是: 1. 将文件整理成数据库table完全适配的格式并使用load(mysql)或copy(postgres)导入 2. 当文件内容需要进行预处理时,这需要一个程序调用数据库接口,边处理边存入 基于解决方案2,将

PostgresSQL数据库安装及操作

PostgreSQL介绍 PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS). 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们. PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发. 它不受任何公司或其他私人实体控制. 它是开源的,其源代码是免费提供的. PostgreSQL是跨平台的,可以在许多操作系统上运行,如Linux,FreeBSD,OS X,Solaris和Microsoft W

Python:使用psycopg2模块操作PostgreSQL

安装psycopg2模块: 怎么验证是否已经安装过psycopy2? 编写上面代码,运行看是否抛出缺少psycopg2模块. 安装方法1: 1)使用psycopg2-2.4.2.win-amd64-py2.7-pg9.0.4-release.exe安装,下载地址:http://vdisk.weibo.com/s/Cd8pPaw56Ozys 直接运行exe,不出错误,运行上边代码验证代码无错误,基本算是安装完成了. 2)怎么卸载? 2.1)找到安装目录:C:\Python27,发现下边包含文件:R

ubuntu上跑python连接pg,报错 ImportError: No module named psycopg2

ubuntu上跑python连接pg,报错  ImportError: No module named psycopg2 [email protected]:~# python /home/zxw/PGWriterTest_m.py Traceback (most recent call last): File "/home/zxw/PGWriterTest_m.py", line 4, in <module> import psycopg2 ImportError: No