db_helper.py是数据库操作包,主要有两个函数,分别是read()数据库读操作函数和write()数据库写操作函数。这个包的代码是从小戴同学分享的博文改造过来的。
1 #!/usr/bin/env python 2 # coding=utf-8 3 4 import psycopg2 5 from common import log_helper 6 from config import const 7 8 # 初始化数据库参数 9 db_name = const.DB_NAME 10 db_host = const.DB_HOST 11 db_port = const.DB_PORT 12 db_user = const.DB_USER 13 db_pass = const.DB_PASS 14 15 16 def read(sql): 17 """ 18 连接pg数据库并进行数据查询 19 如果连接失败,会把错误写入日志中,并返回false,如果sql执行失败,也会把错误写入日志中,并返回false 20 如果所有执行正常,则返回查询到的数据,这个数据是经过转换的,转成字典格式,方便模板调用,其中字典的key是数据表里的字段名 21 """ 22 try: 23 # 连接数据库 24 conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_host, port=db_port) 25 # 获取游标 26 cursor = conn.cursor() 27 except Exception as e: 28 print(e.args) 29 log_helper.error('连接数据库失败:' + str(e.args)) 30 return False 31 try: 32 # 执行查询操作 33 cursor.execute(sql) 34 # 将返回的结果转换成字典格式 35 data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in cursor.fetchall()] 36 except Exception as e: 37 print(e.args) 38 log_helper.error('sql执行失败:' + str(e.args) + ' sql:' + str(sql)) 39 return False 40 finally: 41 # 关闭游标和数据库链接 42 cursor.close() 43 conn.close() 44 # 返回结果(字典格式) 45 return data 46 47 48 def write(sql, vars): 49 """ 50 连接pg数据库并进行写的操作 51 如果连接失败,会把错误写入日志中,并返回false,如果sql执行失败,也会把错误写入日志中,并返回false,如果所有执行正常,则返回true 52 """ 53 try: 54 # 连接数据库 55 conn = psycopg2.connect(database=db_name, user=db_user, password=db_pass, host=db_host, port=db_port) 56 # 获取游标 57 cursor = conn.cursor() 58 except Exception as e: 59 print(e.args) 60 log_helper.error('连接数据库失败:' + str(e.args)) 61 return False 62 try: 63 # 执行sql语句 64 cursor.execute(sql, vars) 65 # 提交事务 66 conn.commit() 67 except Exception as e: 68 print(e.args) 69 # 如果出错,则事务回滚 70 conn.rollback() 71 log_helper.error('sql执行失败:' + str(e.args) + ' sql:' + str(sql)) 72 return False 73 else: 74 # 获取数据 75 try: 76 data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) 77 for row in cursor.fetchall()] 78 except Exception as e: 79 # 没有设置returning或执行修改或删除语句时,记录不存在 80 data = None 81 finally: 82 # 关闭游标和数据库链接 83 cursor.close() 84 conn.close() 85 86 # 如果写入数据后,将数据库返回的数据返回给调用者 87 return data