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 ...
随机推荐
- 修改flex chart中Legend的字体样式
最近在弄FLEX的图表, 发现CHART 中的Legend 的字体通过直接设置Style 并没有办法改变字体大小. google 了下, 发现了这个方法: 通过派生LegendItem类,并设置Leg ...
- Python学习之-- IO 操作
阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待. 基本概念解释,环境限定 ...
- Codeforces 658B Bear and Displayed Friends【set】
题目链接: http://codeforces.com/contest/658/problem/B 题意: 给定元素编号及亲密度,每次插入一个元素,并按亲密度从大到小排序.给定若干操作,回答每次询问的 ...
- java多线程编程01---------基本概念
一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...
- Ubuntu 16.04安装Guake Terminal终端(使用一键唤醒功能)
安装: sudo apt-get install guake-indicator sudo apt-get install guake 使用: 先启动guake-indicator,再启动guake. ...
- oracle 用户账户被锁处理
一.以管理员身份登录 SQL> conn sys/sys as sysdba; (分号是必须的但是我是以system登录的所在这不应该写conn sys/sys as sysdba应该写conn ...
- mysql中如何查询最近24小时、top n查询
MySQL中如何查询最近24小时. where visittime >= NOW() - interval 1 hour; 昨天. where visittime between CURDATE ...
- Java: 创建自带依赖库的Jar包
pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- [React] Extend styles with styled-components in React
In this lesson, you will learn how to extend styles from one styled-component to another in a React ...
- js 终止执行的实现方法
终止JS运行有如下几种可能: 1.终止函数的运行的方式有两种 (1)在函数中使用return,则当遇到return时,函数终止执行,控制权继续向下运行 (2)在函数中使用try-catch异常处理,需 ...