python pgsql数据库查询操作,函数组装实现逻辑

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @createTime    : 18-4-20 下午8:26
# @author  : miss Chen
def find_values_by_company_name(self, company_name):
    data_row = self._pg_util.query_one_sql(   
        #数据库查询实现,分两层,首先先写个函数实现组装成sql语句,以及对应的条件值,见下面两个方法;
        #然后,再通过query_one_sql进行数据库连接并执行,见最后一个方法;
        self.s_b.find_by_value(column_name=self.model.COMPANY_NAME, column_value=company_name)
    )


def find_by_value(self, column_name, column_value, is_array=False, limit_num=None):
    """
    注释见同名私有方法
    """
    return self.__find_column_by_value('*', column_name, column_value, is_array, limit_num)

def __find_column_by_value(self, select_column_name, column_name, column_value, is_array=False,
                               limit_num=None):

"""
构造查找列名值等于输入值的sql
:param column_name: 列名
:param column_value: 列值,这里会做安全过滤处理
:param is_array: 列值是否为一个数组列
:param limit_num: 最大获取数量
"""
# 根据列类型是否为数组生成过滤条件
condition = ' WHERE '
if is_array:
    condition += column_name + ' @>array[%s]'
else:
    condition += column_name + '= %s'

# 限制查询数量
if limit_num is not None:
    condition += ' limit ' + str(limit_num)

return 'SELECT ' + select_column_name + ' from ' + self._table_name + \
       condition, [column_value]


def query_one_sql(self, sql_and_params):
    """
    查询返回行
    """
    sql, params = sql_and_params
    # params = sql_and_params[1]
    conn = self.get_conn()
    cur = conn.cursor(cursor_factory=DictCursor)
    try:
        cur.execute(sql, params)
        row = cur.fetchone()
        return dict(row) if row else {}
    except Exception, e:
        self.__logging_error_message(sql, params)
        raise e
    finally:
        self.__close_conn(cur, conn)

你可能感兴趣的:(spark海量数据分析)