• python3.6 + selenium2.53.1 查询数据库并将返回的内容中每一行的内容转换成class对象


    环境:

    win10

    python3.6

    selenium2.53.1

    准备工作:先安装pymysql

    python2.x链接数据库使用MySQLdb,而python3.x链接数据库使用pymysql

    pymysql安装:

    方式一:通过pip执行安装

    1.进入Scripts目录(E:Program FilesPython36Scripts)

    2.运行指令pip install PyMySQL

    方式二:下载解压包进行安装

    1.进入:https://github.com/PyMySQL/PyMySQL,进行下载

    2.将下载的内容解压到Libsite-packages目录下(E:Program FilesPython36Libsite-packages)

    3.进入刚刚解压的文件pymysql(E:Program FilesPython36Libsite-packagespymysql)

    4.运行指令安装:python setup.py install

    实现步骤:

    1.创建数据库连接:host为数据库所在位置、port为数据库端口,user为登陆用户名、passwd为登陆者的密码、db为表名、charset:指定数据库格式比如:utf8(charset可以不写)

    def connects(self, host, port, user, passwd, db, charset):
            # 链接数据库,定义账号密码以及用户名
            self.connect = pymysql.Connect(
                host=host,
                port=port,
                user=user,
                passwd=passwd,
                db=db,
                charset=charset
            )

    2.创建游标

    def cureors(self):
            # 通过连接数据来获取游标
            self.cursor = self.connect.cursor()

    3.根据查询语句返回查询结果并按照json格式返回

        def selects(self, sql=None):
            print("返回字典")
            try:
                self.cursor.execute(sql)
    
                # 好像是打印字段的属性
                index = self.cursor.description
    
                result = []
    
                # fetchall():接收全部的返回结果行.
                for res in self.cursor.fetchall():
    
                    row = {}
    
                    # range(x):表示从0到x,不包括x
                    # len:返回字符串、列表、字典、元组等长度
                    for i in range(len(index)):
                        # index[i][0] 获取字段里属性中的局部信息
                        row[index[i][0]] = res[i]
                    result.append(row)
                    # print("selects_list %s" % row)
                return result;
            except:
                print('MySQL connect fail...')

    4.关闭链接不能忘记

        def closes(self):
            # 关闭游标
            self.cursor.close()
            # 关闭库链接
            self.connect.close()

    5.开始链接

    if __name__ == '__main__':
        pm = pymysqls.__new__(pymysqls)
        pm.connects_cureors('load', 3306, 'root', '123456', 'table', 'utf8')
        sql = "----';"
        result = pm.selects(sql)
        pm.closes()
        data_list = pm.obj_test(result, user_class())

    6.关闭的指令不能忘记

        def closes(self):
            # 关闭游标
            self.cursor.close()
            # 关闭库链接
            self.connect.close()

    7.将查询之后的结果result转换成类对象

    7.1先创建一个字典data_list用于保存全部对象

    7.2for遍历result的数据同时创建class对象test

    7.3创建一个列表dictionaries来存储test,但是要提现键值对的关系,用于区分唯一性

    7.4调用命令执行转换语句

    7.5通过类对象的id来最为键,整个类对象作为值

    7.6最后将列表添加到字典中并进行返回

    def obj_test(self, result,obj):
            data_list = []
            for res in result:
                test = obj
                dictionaries = {}
                jsondatar = json.dumps(res, ensure_ascii=False)
                rebuild = json.loads(jsondatar)
                test.__dict__ = rebuild
                dictionaries[test.id] = test
                data_list.append(dictionaries)
            return data_list;

    整体步骤分析;:

    1.链接数据库

    2.创建游标

    3.将查询的结果通过json格式进行保存(一般使用字典和列表)

    附加动作:

    将json转换成string格式

    def json_str_dumps(self, result):
            # 使用json.dumps将数据转换为json格式,json.dumps方法默认会输出成这种格式"u5377u76aeu6298u6263",加ensure_ascii=False,则能够防止中文乱码。
            # JSON采用完全独立于语言的文本格式,事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
            # json.dumps()是将原始数据转为json(其中单引号会变为双引号),而json.loads()是将json转为原始数据。
            jsondatar = json.dumps(result, ensure_ascii=False)
            # 去除首尾的中括号
            return jsondatar[1:len(jsondatar) - 1]

     写的不好请勿喷。谢谢。。。

  • 相关阅读:
    类和对象
    函数复习
    20145214 《网络对抗技术》 Web安全基础实践
    20145214 《网络对抗技术》 Web基础
    20145214 《网络对抗技术》 网络欺诈技术防范
    20145214 《网络对抗技术》 信息搜集与漏洞扫描
    20145214 《网络对抗技术》 MSF基础应用
    20145214 《网络对抗技术》 恶意代码分析
    20145214《网络对抗技术》免杀原理与实践
    20145214《网络对抗》MAL_后门原理与实践
  • 原文地址:https://www.cnblogs.com/xiaodingdong/p/7742529.html
Copyright © 2020-2023  润新知