3 Selenium Python 数据库及文件
1 MySQL
1.1 安装
下载:MySQL-python-1.2.3.win-amd64-py2.7直接安装,要求Python2.7(Python version 2.7 required)
验证:import MySQLdb 不报错就可以了
1.2 基础
1 连接数据库:MySQLdb.connect(host='',port='',user='',passwd='',db='')
class Connection(_mysql.connection):
"""MySQL Database Connection Object"""
default_cursor = cursors.Cursor
def __init__(self, *args, **kwargs):
"""
Create a connection to the database. It is strongly recommended
that you only use keyword parameters. Consult the MySQL C API
documentation for more information.
host
string, host to connect
user
string, user to connect as
passwd
string, password to use
db
string, database to use
port
integer, TCP/IP port to connect to
charset
If supplied, the connection character set will be changed
to this character set (MySQL-4.1 and newer). This implies
use_unicode=True.
"""
2 操作数据库:首先需要获得一个cursor对象, 然后使用cursor的方法执行SQL
- execute(sql, args):执行单条sql语句,接收的参数为sql语句和参数列表,返回值为受影响的行数
def execute(self, query, args=None):
"""Execute a query.
query -- string, query to execute on server
args -- optional sequence or mapping, parameters to use with query.
Note: If args is a sequence, then %s must be used as the
parameter placeholder in the query. If a mapping is used,
%(key)s must be used as the placeholder.
Returns long integer rows affected, if any
"""
- callproc( procname, args):执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
- executemany(sql, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
- nextset():移动到下一个结果集
3 接收返回值:也是使用cursor对象的方法进行接收
- fetchone():返回一条结果
- fetchall():返回全部结果
- fetchmany(size=None):返回size条结果。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据
- scroll(value, mode='relative'):移动指针到某一行.
- mode='relative',则表示从当前所在行移动value条
- mode='absolute',则表示从结果集的第一 行移动value条.
4 关闭数据库:需要关闭cursor对象和connect对象
1.3 举例
1 #配置文件============================= 2 #DB配置文件 3 [db] 4 host = 127.0.0.1 5 port = 3306 6 user = root 7 passwd = 8 dbname = test 9 10 #配置文件解析类============================= 11 #!/usr/bin/env python 12 # coding=utf-8 13 14 import ConfigParser 15 16 class Configer(object): 17 18 #构造函数,初始化ConfigParser类,并读取config文件 19 def __init__(self , filePath): 20 self.conf = ConfigParser.ConfigParser() 21 self.conf.read(filePath) 22 23 #获取key的value 24 def getConf(self , section , key): 25 result = self.conf.get(section, key) 26 return result 27 28 #解析配置文件============================= 29 #!/usr/bin/env python 30 # coding=utf-8 31 32 from testdb.Configer import * 33 34 class db(object): 35 conf = Configer("./db.conf") 36 host = conf.getConf('db', 'host') 37 port = conf.getConf('db', 'port') 38 user = conf.getConf('db', 'user') 39 passwd = conf.getConf('db', 'passwd') 40 dbname = conf.getConf('db', 'dbname') 41 42 #数据库封装及测试============================= 43 #!/usr/bin/env python 44 #encoding=UTF-8 45 46 from MySQLdb import * 47 import sys 48 from testdb.db import * 49 50 # print db.host 51 class MySQLEngine(object): 52 53 def __init__(self): 54 self.conn = None 55 self.cur = None 56 57 ''' 58 打开数据库 59 ''' 60 def open(self,dbHost,dbPort,dbUser,dbPasswd,dbName): 61 self.conn = connect(host=dbHost,port=dbPort,user=dbUser,passwd=dbPasswd,db=dbName,charset='utf8') 62 self.cur = self.conn.cursor() #拿到游标,sql语句需要游标执行 63 ''' 64 查询一条 65 ''' 66 def searchOne(self,sql): 67 affRows = self.cur.execute(sql) #通过游标执行查询操作,返回影响行数 68 res = self.cur.fetchone() 69 return res,affRows 70 ''' 71 查询指定条数 72 ''' 73 def searchMany(self,sql,size): 74 affRows = self.cur.execute(sql) #通过游标执行查询操作,返回影响行数 75 res = self.cur.fetchmany(size) #每条结果都是一个tuple,所有tuple最终组成一个tuple 76 return res,affRows 77 ''' 78 查询所有 79 ''' 80 def searchAll(self,sql): 81 affRows = self.cur.execute(sql) #通过游标执行查询操作,返回影响行数 82 res = self.cur.fetchall() 83 return res,affRows 84 ''' 85 该改记录,包括:增、删、改 86 ''' 87 def modify(self,sql,params): 88 affRows = self.cur.execute(sql,params) 89 self.conn.commit() #不commit不会修改到数据库中 90 return affRows 91 ''' 92 关闭数据库 93 ''' 94 def close(self): 95 self.cur.close() 96 self.conn.close() 97 98 #实例化 99 mysql = MySQLEngine() 100 #连接数据库 101 mysql.open(db.host,int(db.port),db.user,db.passwd,db.dbname) 102 #单个查询 103 (result,affRows) = mysql.searchOne('SELECT * FROM t_redis WHERE id=1;') 104 print result[2] 105 print affRows 106 #指定个数查询 107 (result,affRows) = mysql.searchMany('SELECT * FROM t_redis WHERE id>1;' , 3) 108 print result 109 print affRows 110 #插入 111 sql = "INSERT INTO t_redis(test_id , test_info) VALUES(%s,%s);" 112 params = ('00019','豆腐') 113 print mysql.modify(sql, params) 114 mysql.close() 115 116 #测试结果============================= 117 张飞 118 1 119 120 ((2, u'2', u'info_2'), (5, u'0005', u'\u7a7a\u7075'), (15, u'00015', u'\u5c06\u519b')) 121 6 122 123 1
2 xlutils Excel
2.1 简介
python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils
- xlrd读取excel但是不能对其进行操作
- xlwt生成excel文件,不能在已有的excel文件基础上进行修改
- 如需要修改文件就要使用xluntils模块
2.2 安装
- xlutils 依赖xlrd和xlwt,pip install xlutils 安装会自动安装xlrd和xlwt
- xlutils 只能处理xls文件
2.3 举例
1 #!/usr/bin/env python 2 # coding=utf-8 3 4 from xlrd import open_workbook 5 from xlutils.copy import copy 6 # 7 rbook = open_workbook(u'C:\\测试数据2.xls') 8 rsheet = rbook.sheet_by_name('测试用例') 9 wbook = copy(rbook) 10 #读操作 11 print rsheet.cell(1,1).value 12 #写操作,通过get_sheet()获取的sheet有write()方法 13 wsheet = wbook.get_sheet(0) 14 wsheet.write(2, 4, 'changed!') 15 16 wbook.save(u'C:\\测试数据2.xls')
3 openpyxl Excel
3.1 简介
A Python library to read/write Excel 2007 xlsx/xlsm files
openpyxl是Python处理表格的库之一,但是它是处理excel2007/2010的格式,也就是xlsx系列,如果要处理以前的2003的表格(xls),那么则要用另外的库
如果只是要进行表格数据读取和进行简单的写数据的话,推荐使用openpyxl
3.2 安装
openpyxl依赖jdcal ,pip install openpyxl安装会自动安装jdcal
3.3 举例
1 #!/usr/bin/env python 2 # coding=utf-8 3 from openpyxl.workbook import Workbook 4 from openpyxl.reader.excel import load_workbook 5 6 #指定excel 7 book = load_workbook(filename=u'C:\\测试数据3.xlsx') 8 #指定sheet页 9 sheet = book.get_sheet_by_name('xml字段') 10 #最大行列数 11 print sheet.max_row 12 print sheet.max_column 13 # column=len(sheet.column) 14 #获取指定cell的值 15 print sheet.cell(row=2, column=1).value 16 #指定cell写入值 17 sheet.cell(row=6,column=6).value = "value3333" 18 #保存 19 book.save(u'C:\\测试数据3.xlsx')