django 使用原生sql的方法

import logging

import psycopg2
from DBUtils.PooledDB import PooledDB
from psycopg2 import pool
from psycopg2._psycopg import ProgrammingError
from psycopg2.extras import DictCursor

from utils.ERP.erpsettings import ERP_SQL_INFO

logger = logging.getLogger('django')


class ERPDB(object):
    __pool = None

    def __init__(self, host=ERP_SQL_INFO.get('HOST'), user=ERP_SQL_INFO.get('USER'),
                 password=ERP_SQL_INFO.get('PASSWORD'), database=ERP_SQL_INFO.get('DATABASE'),
                 port=ERP_SQL_INFO.get('PORT')):
        try:
            # self.connectPool = pool.SimpleConnectionPool(2, 10, host=host, port=port,
            #                                              user=user, password=password,
            #                                              database=database, keepalives=1,
            #                                              keepalives_idle=30, keepalives_interval=10,
            #                                              keepalives_count=5)
            # self.conn, self.cursor = self.__get_connection()
            if ERPDB.__pool is None:
                __pool = PooledDB(creator=psycopg2,
                                  mincached=1,
                                  maxcached=20,
                                  host=host,
                                  port=port,
                                  user=user,
                                  password=password,
                                  dbname=database,
                                  # use_unicode=False,
                                  # charset="utf8",
                                  cursor_factory=DictCursor)
            self._conn = __pool.connection()
            self._cursor = self._conn.cursor()
        except Exception as e:
            logger.info('初始化erp数据库连接失败:{}'.format(e))

    def execute(self, sql, param=None):
        count = -1
        try:
            # print(sql)
            self._cursor.execute(sql, param)
            count = self._cursor.rowcount
            self._conn.commit()
        except Exception as e:
            logger.error('psycopg2 提交失败 {}'.format(e))
            self._conn.rollback()
        return count

    def get_one(self, sql, param=None):
        try:
            self.execute(sql, param)
            result = self._cursor.fetchone()
            return result
        except ProgrammingError:
            return dict()

    def get_all(self, sql, param=None):
        self.execute(sql, param)
        result = self._cursor.fetchall()
        return result

    def dispose(self):
        self._cursor.close()
        self._conn.close()

    def getAll(self, sql, param=None):
        """
        @summary: 执行查询,并取出所有结果集
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表
        @return: result list(字典对象)/boolean 查询到的结果集
        """
        if param is None:
            self._cursor.execute(sql)
        else:
            self._cursor.execute(sql, param)
        try:
            list_header = [row[0] for row in self._cursor.description]
            list_result = [[item for item in row] for row in self._cursor.fetchall()]
            result = [dict(zip(list_header, row)) for row in list_result]
        except:
            result = False
        return result

    def getCount(self, sql, param=None):
        if param is None:
            self._cursor.execute(sql)
        else:
            self._cursor.execute(sql, param)
        return self._cursor.rowcount

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值