sqlite3 设置返回值为字典类型

发布时间 2023-10-24 22:42:31作者: Avicii_2018
# 0. pip install pymysql
# 1. 导入 pymysql  import pymsql
# 2. 创建一个数据库连接对象
# 3. 创建游标 cursor = conn.cursor()
# 4. SQL执行 cursor.execute(sql)
# 5. DML提交事务 conn.commit
# 6. 关闭游标 cursor.close()
# 7. 关闭连接 cursor.close()
import sqlite3

# from Silence.utils.log_util import logger

"""
sqlite是一种嵌入式数据库,它的数据库就是一个文件。
由于SQLite本身是用C写的,而且体积很小,所以经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。
Python中内置了SQLite3,连接到数据库后,需要打开游标Cursor,通过Cursor执行SQL语句,然后获得执行结果,
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可.
"""


class DataBase:

    def dict_factory(cursor, row):
        # 将游标获取的数据处理成字典返回
        d = {}
        for idx, col in enumerate(cursor.description):
            d[col[0]] = row[idx]
        return d

    def excute(self, sql):
        """
        获取mysql的连接
        :return: 返回一个数据库连接对象
        @return:
        """
        # 创建一个连接对象
        conn = sqlite3.connect("E:\\bysms\\resource\db.sqlite3")
        # 使得查询结果以字典形式返回.    就是在连接数据库后,将 db.row_factory 方法重写为 dict_factory 方法即可
        conn.row_factory = DataBase.dict_factory


        # 创建一个游标cursor
        cursor = conn.cursor()
        # 执行一条sql 语句
        cursor.execute(sql)
        # try:
        #     logger.info(f'查询数据:{sql}')
        #     cursor.execute(sql)
        # except BaseException as e:
        #     logger.error(f'查询失败{e.args}')
        # else:
        #     logger.info('查询成功')

        # 获取结果集
        data = cursor.fetchall()


        # 关闭 游标
        cursor.close()
        # 关闭 连接
        conn.close()
        return data



if __name__ == '__main__':
    sql = 'select * from common_customer'


    result = DataBase().excute(sql)

    print(result)

运行结果:

[{'id': 29, 'name': '南京中医院1', 'phonenumber': '2551867851', 'address': '江苏省-南京市-秦淮区-汉中路-501'}, {'id': 30, 'name': '南京中医院2', 'phonenumber': '2551867852', 'address': '江苏省-南京市-秦淮区-汉中路-502'}, {'id': 31, 'name': '南京中医院3', 'phonenumber': '2551867853', 'address': '江苏省-南京市-秦淮区-汉中路-503'}, {'id': 32, 'name': '太原中医院1', 'phonenumber': '0351867851', 'address': '山西省-太原市-杏花岭区-解放路-301'}, {'id': 33, 'name': '太原中医院2', 'phonenumber': '0351867852', 'address': '山西省-太原市-万柏林区-建设路-302'}, {'id': 34, 'name': '太原中医院3', 'phonenumber': '0351867853', 'address': '山西省-太原市-尖草坪区-前进路-303'}, {'id': 35, 'name': '西安中医院1', 'phonenumber': '029867851', 'address': '陕西省-西安市-雁塔区-解放路-101'}, {'id': 36, 'name': '西安中医院2', 'phonenumber': '029867852', 'address': '陕西省-西安市-长安区-建设路-102'}, {'id': 37, 'name': '西安中医院3', 'phonenumber': '029867853', 'address': '陕西省-西安市-莲湖区-前进路-103'}, {'id': 38, 'name': '郑州人民医院1', 'phonenumber': '0371867851', 'address': '河南省-郑州市-中原区-解放路-201'}, {'id': 39, 'name': '郑州人民医院2', 'phonenumber': '0371867852', 'address': '河南省-郑州市-金水区-建设路-202'}, {'id': 40, 'name': '郑州人民医院3', 'phonenumber': '0371867853', 'address': '河南省-郑州市-上街区-前进路-203'}, {'id': 41, 'name': '南京人民医院1', 'phonenumber': '2551867811', 'address': '江苏省-南京市-秦淮区-汉中路-5011'}, {'id': 42, 'name': '南京人民医院2', 'phonenumber': '2551867812', 'address': '江苏省-南京市-秦淮区-汉中路-5012'}, {'id': 43, 'name': '南京人民医院3', 'phonenumber': '2551867813', 'address': '江苏省-南京市-秦淮区-汉中路-5013'}, {'id': 65, 'name': '陕西中医院-修改1', 'phonenumber': '13345678888', 'address': '陕西中医院-修改1'}, {'id': 66, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 67, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 68, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 69, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 70, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 71, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 72, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 73, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 74, 'name': '陕西省中医医院1', 'phonenumber': '13345679934', 'address': '西安市钟楼1'}, {'id': 75, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 76, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 77, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 78, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 79, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 80, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 81, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 82, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 83, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 84, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 85, 'name': '陕西中医院-修改2', 'phonenumber': '2222222222222', 'address': '陕西中医院-修改2'}, {'id': 86, 'name': '好好医院', 'phonenumber': '001', 'address': '武汉市桥西医院北路'}, {'id': 87, 'name': '好好医院', 'phonenumber': '002', 'address': '武汉市桥西医院北路'}, {'id': 88, 'name': '好好医院', 'phonenumber': '003', 'address': '武汉市桥西医院北路'}, {'id': 89, 'name': '好好医院', 'phonenumber': '004', 'address': '武汉市桥西医院北路'}, {'id': 90, 'name': '好好医院', 'phonenumber': '005', 'address': '武汉市桥西医院北路'}, {'id': 91, 'name': '好好医院', 'phonenumber': '006', 'address': '武汉市桥西医院北路'}, {'id': 92, 'name': '好好医院', 'phonenumber': '007', 'address': '武汉市桥西医院北路'}, {'id': 93, 'name': '好好医院', 'phonenumber': '008', 'address': '武汉市桥西医院北路'}, {'id': 94, 'name': '好好医院', 'phonenumber': '009', 'address': '武汉市桥西医院北路'}, {'id': 95, 'name': '好好医院', 'phonenumber': '010', 'address': '武汉市桥西医院北路'}, {'id': 96, 'name': '001医院', 'phonenumber': '1353369001', 'address': '武汉市桥西医院北路'}, {'id': 97, 'name': '002医院', 'phonenumber': '1353369002', 'address': '武汉市桥西医院北路'}, {'id': 98, 'name': '003医院', 'phonenumber': '1353369003', 'address': '武汉市桥西医院北路'}, {'id': 99, 'name': '004医院', 'phonenumber': '1353369004', 'address': '武汉市桥西医院北路'}, {'id': 100, 'name': '005医院', 'phonenumber': '1353369005', 'address': '武汉市桥西医院北路'}, {'id': 101, 'name': '006医院', 'phonenumber': '1353369006', 'address': '武汉市桥西医院北路'}, {'id': 102, 'name': '007医院', 'phonenumber': '1353369007', 'address': '武汉市桥西医院北路'}, {'id': 103, 'name': '008医院', 'phonenumber': '1353369008', 'address': '武汉市桥西医院北路'}, {'id': 104, 'name': '009医院', 'phonenumber': '1353369009', 'address': '武汉市桥西医院北路'}, {'id': 105, 'name': '010医院', 'phonenumber': '1353369010', 'address': '武汉市桥西医院北路'}]