python基础学习6-mongodb、sys、接口开发、操作excel

1       mysql补充

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)    #直接获取的数据转换为字典格式的

cur.description                   #直接获取的描述信息

fileds = [filed[0] for filed in cur.description]        #列表生成式,获取到第一行所有的字段

import pymysql,xlwt
conn = pymysql.connect(host=‘1.1.1.1‘,user=‘jxz‘,password=‘123456‘,db=‘jxz‘,port=3306,charset=‘utf8‘)
# cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #直接获取的数据转换为字典格式的
cur = conn.cursor() #写excel用默认的二维数组即可,因为用字典的话顺序不固定,数据会写错
cur.execute(‘select * from app_student limit 10‘)
print(cur.description) #表的信息
fileds = [filed[0] for filed in cur.description] #列表生成式,获取到所有的字段
print(fileds)
# print(cur.fetchall())
data = list(cur.fetchall())
data .insert(0,fileds) #insert只是插入指定位置的数据
print(data)
book = xlwt.Workbook()
sheet = book.add_sheet(‘sheet1‘)
#方法一:
# for index,line_data in enumerate(data):
# for index2,col_data in enumerate(line_data):
# sheet.write(index,index2,col_data)
#一个一个单元格写,先写第一行的每个单元格
#写每一行的时候,行号是不变的,列在变

#方法二:此方法需要定义一个行和一个列去控制
line = 0 #行号

for d in data: #控制行
col = 0 # 列号
for col_data in d: #控制列
sheet.write(line,col,col_data)
col+=1
line+=1

book.save(‘ex.xls‘)

cur.close()
conn.close()

import pymysql,xlwt
def mydb(sql):
conn = pymysql.connect(host=‘1.1.1.1‘,user=‘jxz‘,password=‘123456‘,port=3306,db=‘jxz‘,charset=‘utf8‘,autocommit=True)
cur = conn.cursor()
cur.execute(sql)
fileds = [filed[0] for filed in cur.description] #列表生成式,获取到第一行表头数据信息
data = list(cur.fetchall()) #将获取的数据直接转换成元组
data.insert(0,fileds) #将第一行获取到的列表插入到data列表的第1个位置
return data
print(mydb(‘select * from app_student limit 10‘))

def write_excel(excel_name):
book = xlwt.Workbook
sheet = book.add_sheet(‘sheet1‘)
a = ‘select * from app_student‘
for index,line_data in enumerate(mydb(sql=a)):
for index2,col_data in enumerate(line_data):
sheet.write(index,index2,col_data)
book.save(excel_name)

2       sys模块

import sys

print(sys.argv)     #把运行python文件的时候,传入的参数都放到argv里面

if len(command)>1:
excel = command[1]
print(‘用例已经运行‘,excel)
else:
print(‘运行python文件的时候,需要传入一个用例名称,例如:python run_case.py case.xls‘)

导入模块的顺序(重点)

1、从当前目录下找python文件

2、如果当前目录下没有,则去python的环境变量(此处不是操作系统那设置的环境变量)里面找这个python文件,print(sys.path) #查看python自己的环境变量

导入模块的实质(重点)

把这个模块的代码从头到尾执行一次

name = ‘hahaha‘

def conn_db(name):

print(‘this is a funcation‘,name)

print(__name__)

if __name__ == ‘__main__‘:      #在其他python文件中导入该模块时,它不会执行if __name__ == ‘__main__‘下面的代码

conn_db(‘b文件‘)

sys.path.append(r‘D:\pythonscript\day7\tools‘)              #如果创建的python文件不在环境变量中,可以通过此方法临时设置环境变量使用

3       mongodb

import pymongo

client = pymongo.MongoClient(host=‘118.24.3.40‘,port=27017)

db = client[‘zhouyifan‘]        #选择数据库,如果不存在直接创建

collection = db[‘stu_info‘]

db.zhouyifan.insert({‘name‘:‘test1‘,‘sex‘:‘男‘,‘age‘:18})

db[‘stu_info‘].insert({‘url‘:‘http://www.jd.com‘,‘title‘:‘jd.com‘,‘addr‘:‘beijing‘})   #插入

print(list(db[‘stu_info‘].find({‘title‘:‘百度‘})))        #查找,需要转换成list才能打印出来

for d in db[‘stu_info‘].find({‘title‘:‘百度‘}):     #使用循环打印出来的是字典

print(d)

collection.delete_one({‘title‘:‘百度‘})       #如果有多条的话,只会删除一条

collection.delete_many()            #会删除多条

print(collection)

collection.update({‘url‘:‘http://www.jd.com‘,‘title‘:‘www.jd.com‘},{‘url‘:‘http://www.jd.com‘,‘title‘:‘www.jd.com‘,‘addr‘:‘亦庄‘})    #更改

4       接口开发

接口开发的作用:

1、  知道接口是怎么开发的

2、  避免别人操作你的数据库

3、  mock服务(即模拟一个服务,保证测试流程能够顺利进行)

import sys
print(sys.path) #查看python自己的环境变量

python环境变量设置如下:

方法一:

快速将整个目录设置python的环境变量(如下方法只能在pycharm中好用,如果将代码拷贝给其他人使用,则设置的环境变量是不生效的):

第二种设置环境变量的方法如下:

import sys,os

base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))     #环境变量设置必须在导入自己写的模块之前,自动获取当前文件向上两级文件夹的路径

sys.path.insert(0,base_path)        #将动态获取到的环境变量插入到最前面,这样导入模块更快

import sys,os
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__是当前这个python文件的绝对路径,
# os.path.abspath(__file__)通过abspath方法将获取的路径分隔符进行转换
#再通过两个dirname获取到父目录
print(base_path)
sys.path.insert(0,base_path)

下面是从自己写的模块导入接口模块:

from lib.interface import server

from conf.setting import SERVER_PORT

server.run(host=‘0.0.0.0‘,port=SERVER_PORT,debug=True)      #设置host=0.0.0.0就可以在同一局域网内其他电脑能访问了,如果不指定host,则只能本机访问

name = ‘hahaha‘
def conn_db(name):
print(‘this is a funcation‘,name)

print(‘__name__‘,__name__)
if __name__ == ‘__main__‘: #在其他python文件中导入该模块时,它不会执行if __name__ == ‘__main__‘下面的代码
conn_db(‘b文件‘)

接口开发示例:

import flask
import json
import pymysql
import hashlib
server = flask.Flask(__name__) #把当前的python文件当做一个服务,__name__表示main

def my_db(sql,port=3306,charset=‘utf8‘):
ip, user, passwd, db = ‘1.1.1.1‘,‘jxz‘,‘123456‘,‘jxz‘
conn = pymysql.connect(host=ip,user=user,
password=passwd,db=db,
port=port,charset=charset,autocommit=True)
cur = conn.cursor()
sql=sql.strip()
cur.execute(sql)
sqlstart = sql[:6].lower() #取sql的开头6位,转换为小写
if sqlstart.startswith(‘select‘) or sqlstart.startswith(‘insert‘): #判断是selec或show的语句获取对应结果
data = cur.fetchall()
else: #加else是为了下面的return不报错
data = ‘ok‘
cur.close()
conn.close()
return data

def my_md5(s):
m = hashlib.md5(s.encode())
return m.hexdigest()

@server.route(‘/login‘,methods=[‘get‘,‘post‘])
def login():
username = flask.request.values.get(‘username‘) #是从客户端发送过来的数据
pwd = flask.request.values.get(‘password‘)
# flask.request.cookies.get(‘ssss‘) #获取cookie
# flask.request.headers.get(‘tttt‘) #获取headers
# json_data = flask.request.json #获取入参是json类型的数据
if username==‘test1‘and pwd==‘123456‘:
res = {"code":1000,"msg":"登录成功","sing":"dfsdfsdfsdfsdf"}
else:
res = {"code":2000,"msg":"账号/密码错误"}
return json.dumps(res, ensure_ascii=False)

@server.route(‘/register‘,methods=[‘post‘])
def reg():
username = flask.request.values.get(‘username‘)
pwd = flask.request.values.get(‘password‘)
cpwd = flask.request.values.get(‘cpassword‘)

if username and pwd and cpwd:
sql1 = ‘select * from nhy where name="%s";‘ %username
sql_res = my_db(sql1)
if sql_res:
res = {"code":2001,"msg":"该用户已注册"}
else:
if pwd==cpwd:
md_pwd = my_md5(pwd)
sql2 = ‘insert into nhy (name,pwd) value("%s","%s");‘ %(username,md_pwd)
sql_res = my_db(sql2)
res = {"code": 1000, "msg": "注册成功"}
else:
res = {"code": 2002, "msg": "两次密码输入不相同"}
else:
res = {"code":2002,"msg":"必填参数未填,请查看接口文档!"}
return json.dumps(res, ensure_ascii=False)

server.run(port=8989,debug=True) #启动服务,此项需要注意,启动该服务之后如果修改脚本再次运行直接重启即可,不能再次点击右键运行,否则会报接口冲突,因为原有运行的服务未停止

5       修改excel

import xlrd

from xlutils import copy        #修改excel需要导入该模块

book1 = xlrd.open_workbook(‘ex.xls‘)        #1、打开原来的excel

new_book = copy.copy(book1)                 #2、拷贝一个新的excel

sheet = new_book.get_sheet(0)              #3、获取第一个sheet页

sheet.write(1,3,‘18‘)

sheet.write(1,1,‘xiaobai‘)

new_book.save(‘ex.xls‘)

6       操作excel

#xlwt 只能写excel

#xlrd 只能读excel

import xlrd

book = xlrd.open_workbook(‘ex.xls‘)

sheet = book.sheet_by_index(0)      #通过sheet索引获取sheet

# sheet = book.sheet_by_name(‘sheet1‘)      #通过sheet名称获取sheet

print(book.nsheets)     #获取到excel中总共有多少个sheet页

print(sheet.cell(0,0).value)    #指定行和列获取某个单元格里的内容

print(sheet.cell(0,1).value)

print(sheet.row_values(0))      #获取某一行的数据

print(sheet.nrows)      #获取excel表中总共有多少行

原文地址:https://www.cnblogs.com/better0903/p/9348146.html

时间: 2024-10-15 22:47:18

python基础学习6-mongodb、sys、接口开发、操作excel的相关文章

python基础学习12(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #python class #面向对象编程oop思想,3个特性:封装.继承.多态,在其他方面的功能,比如重载,模拟等,也可以自定义自己需要的类 #在python中,面向对象主要2个:类和类实例 #类与实例 #类与实例有关

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

python基础学习08(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #异常 """ NameError: 尝试访问一个未申明的变量 ZeroDivisionError:  除数为零 SyntaxError: 解释器语法错误 IndexError: 请求的索引超出序列范

python基础学习 第十七天 (二)

python基础学习 第十七天 (二) 一. 魔法方法 定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加双下划线 方法名的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码. 调用:不同的双下方法有不同的触发方式,就好比盗墓时触发的机关一样,不知不觉就触发了双下方法,例如:init 1.1 len class B: def __len__(self): print(666) b = B()

python的flex服务端数据接口开发

python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted有很好的异步机制. 下面的我写的一个简单的验证用户的python服务端: ______________________________DBServer.py # Copyright (c) 2009-2010 The Newjh Project."""@author: Roy@s

Python 基础学习 网络小爬虫

<span style="font-size:18px;"># # 百度贴吧图片网络小爬虫 # import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imgli

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

[原]零基础学习在Android进行SDL开发系列文章

[原]零基础学习SDL开发之移植SDL2.0到Android [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图 [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP叠加图 [原]零基础学习SDL开发之在Android使用SDL2.0渲染PNG图片 [原]零基础学习SDL开发之在Android使用SDL2.0加载字体 [原]零基础学习在Android进行SDL开发后记 [原]零基础学习在Android进行SDL开发系列文章,布布扣,bubuko.com