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][] 获取字段里属性中的局部信息
row[index[i][]] = 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', '', '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对象的更多相关文章
- 用texarea存储数据,查询数据库后原样显示在jsp中,包括空格和回车换行
用texarea存储数据,查询数据库后原样显示在jsp中,包括空格和回车换行
- 数据库表转换成javaBean对象小工具
package test.utils; import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter; ...
- 数据库中的java.sql.Timestamp转换成Date
查询数据库中的时间类型为 java.sql.Timestamp 保存在json中需要格式化 自定义工具类 DateJsonValueProcessor package com.rom.util; i ...
- 浏览器给openresty连接发送参数请求,查询数据库,并返回json数据
nginx.conf配置文件 #user nobody; worker_processes 1; error_log logs/error.log; #error_log logs/error.log ...
- 在laravel中,使用DB查询数据库后,返回的对象,可以用下面的办法变为数组
$nodes = Db::table('account')->orderBy('sort', 'asc')->orderBy('id' ,'asc')->get()->map( ...
- sqlserver查询数据库中有多少个表,多少视图,多少存储过程,或其他对象
sql server 数表: select count(1) from sysobjects where xtype='U' 数视图: select count(1) from sysobjects ...
- ArcGIS Javascript查询数据库并添加到地图上
将数据存放到数据库中,动态的调取比较灵活,数据变动后不需要改变图层的属性表. 此处采用的方法是通过jquery查询数据库,并将数据库的结果生产json串返回给js,在js中动态解析json串增加点至地 ...
- spring3 hibernate4整合后无法查询数据库
spring3和hibernate4整合后无法查询数据库,一方面是因为已经spring3中没有对hibernate4 HibernateTemplate的支持,另外一个就是需要在hibernate的配 ...
- Python3.x使用PyMysql连接MySQL数据库
Python3.x使用PyMysql连接MySQL数据库 由于Python3.x不向前兼容,导致Python2.x中的很多库在Python3.x中无法使用,例如Mysqldb,我前几天写了一篇博客Py ...
随机推荐
- java比较两个日期大小
方法一 /** * 比较两个日期之间的大小 * * @param d1 * @param d2 * @return 前者大于后者返回true 反之false */ public boolean com ...
- 【转载】《Unix网络编程》思维导图
参考这篇文章,很不错: http://www.cnblogs.com/qiaoconglovelife/p/5734768.html
- 【Nginx】定时器事件
转自:烟雨江南 Nginx事件管理主要是网络事件和定时器事件.下面介绍定时器事件管理,即超时管理. 为什么进行超时管理? Nginx有必要对可能发生超时的事件 进行统一管理,并在事件超时时作出相应的处 ...
- topcoder srm 550
div1 250pt: 题意:有个机器人,从某一点出发,他只有碰到地形边缘或者碰到走过的点时才会改变运动方向,然后接着走,现在给出他的运动轨迹,判断他的运动是否合法,如果合法的话,那么整个地形的最小面 ...
- Github配置SSH
以前也配置过ssh,但是没有注意用法,在配置一次熟悉流程 检查本机是否有ssh key设置 $ cd ~/.ssh 或cd .ssh 如果没有则提示: No such file or director ...
- CentOS系统如何设置服务开机自动运行
centos安装好apache,mysql等服务器程序后,并没有设置成开机自动启动的,为避免重启后还要手动开启web等服务器,还是做下设置好,其实设置很简单,用chkconfig命令就行了.例如要开机 ...
- Win8系统如何关闭用户账户控制UAC
按WIN+S,屏幕右侧出现搜索框,在搜索框中输入UAC,然后单击"更改用户账户控制设置" 然后把弹出的窗口改成"从不通知"就可以了
- react 项目中 引入 bootstrap
react-bootstrap是一个非常受欢迎的针对react封装过的bootstrap,它本身不包含css,所以也是需要使用bootstrap原生库. 在create-react-app建的项目目录 ...
- LoadRunner系列之—-04 录制基于https协议的脚本
实际性能测试过程中,有些需录制脚本的页面或接口是基于https协议的,按原来方法录制脚本,录完了脚本是空的.为解决这个问题,第一步了解https协议的具体实现,这块网上资料很多,可参考页面下方参考资料 ...
- 【转载】TCP和TCP/IP的区别
TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议, 又叫网络通讯协议,这个协议是Internet国际互联网络的基 ...