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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 Files\Python36\Scripts)

2.运行指令pip install PyMySQL

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

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

2.将下载的内容解压到Lib\site-packages目录下(E:\Program Files\Python36\Lib\site-packages)

3.进入刚刚解压的文件pymysql(E:\Program Files\Python36\Lib\site-packages\pymysql)

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

 

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

以上是关于python3.6 + selenium2.53.1 查询数据库并将返回的内容中每一行的内容转换成class对象的主要内容,如果未能解决你的问题,请参考以下文章

geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta

Selenium 2.53 不适用于 Firefox 28

Selenium 2.53.1 在 FireFox 48 上不起作用

Selenium 2.53 或 2.48 在 Firefox 48.0 中不起作用

哪个 Firefox 版本与 Selenium 2.53.0 兼容?

Selenium 2.53.1 - PHP 验收测试 - 点击 javascript alert