第6课:datetime模块、操作数据库、__name__、redis、mock接口
1. datetime模块
import datetime print(datetime.datetime.today()) # 当前时间 2018-01-23 17:22:35.739667
print(datetime.datetime.now()) # 和today一样 2018-01-23 17:22:35.739667 print(datetime.datetime.today().strftime('%H:%M:%S')) # 按指定格式格式化好的时间字符串
print(datetime.datetime.today() + datetime.timedelta(-3)) # 取三天前的 三天后的(3) 2018-01-20 17:25:37.470085
print(datetime.date.today()) # 取当天的日期 2018-01-23
2. 操作mysql数据库
import pymysql
import config
# 1. 连接mysql,ip 端口号 用户名 密码 数据库
# 2. 建立游标
# 3. 执行sql
# 4. 获取结果
# 5. 关闭游标
# 6. 关闭连接 # charset必须写utf8,写utf-8会报错
conn = pymysql.connect(host=config.host, port=config.port, user=config.user, passwd=config.passwd,
db=config.dbname, charset='utf8')
cur = conn.cursor() # 建立游标,这种方式获取到的返回结果是元组
# cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 这种方式获取到的结果是字典类型的
sql = 'select * from bt_stu limit 2;'
# sql = "insert into bt_stu values(560, 'qq', 1, 18101000001, '中国', 1);"
cur.execute(sql) # 执行sql
conn.commit()
res = cur.fetchall() # 获取sql语句执行的结果,是一个二维的元组
# res1 = cur.fetchone() # 只获取一条结果,它的结果是一个一维元组
print(res)
# print(res1)
#
# cur.scroll(0, mode='absolute') # 移动游标,绝对路径,移至最前面
# cur.scroll(0, mode='relative') # 移动游标,相对于当前位置
cur.close()
conn.close()
3. if __name__ == '__main__': # 用法
a.py print("outside: ", __name__) # 别的文件导入这个文件,运行的结果是当前文件名tools if __name__ == '__main__': # 别人导入这个文件时,这个函数不执行,
print('main:', __name__) # 运行当前文件时,结果是__main__
b.py
# import一个文件实质是把这个文件运行了一遍
# import的文件中如果有if __name__ == '__main__',导入这个文件时时不执行这个函数
import a
# 运行此文件输出结果是
a
4. redis操作
1. 关系型数据库:如mysql Oracle sqlserver
非关系型数据库:
key-value格式的
memcahe # 存在内存中
redis # 存在内存中
mongodb # 数据存在磁盘中
2. redis的安装:pip install redis
3.
import redis
# redis 只有密码,没有用户名
# 字符串类型
r = redis.Redis(host='211.149.***.**', port=6379, password='******', db=1) # 端口默认6379
# r.set('qxy_session', '201801211506') # set数据
# print(r.get('qxy_session')) # redis取出来的数据都是bytes类型的 b'201801211506'
# print(r.get('qxy_session').decode()) # 所以需要用decode方法转成字符串 201801211506
# r.delete('qxy_session') # 删除一个
# r.setex('qxy', 'hahaha', 20) # 可以指定key的失效时间,单位是秒
# set get delete setex 都是针对string类型的 k - v
# 这种写法是有层级的
r.set('qxy:test1', '没交作业')
r.set('qxy:test2', '交了作业')
print(r.keys()) # 获取所有的key
print(r.keys('qxy*')) # 以txz开头的key
print(r.type('qxy:test1')) # 获取key的类型 # hash类型
r.hset('qxy_sessions', 'q1', '1') # 插入数据
r.hset('qxy_sessions', 'q2', '2')
r.hset('qxy_sessions', 'q3', '3')
print(r.hget('qxy_sessions', 'q1').decode()) # 获取某条数据
print(r.hgetall('qxy_sessions')) # 获取hash类型中所有的类型
all_data = {}
for k,v in r.hgetall('qxy_sessions').items():
k = k.decode()
v = v.decode()
all_data[k] = v
print(all_data)
# hash类型没有过期时间
练习题
import redis
# 将redis中db1的数据迁移至db8中
r = redis.Redis(host='211.149.***.**', port=6379, password='******', db=1)
r_new = redis.Redis(host='211.149.***.**', port=6379, password='******', db=8)
for k in r.keys(''):
if r.type(r.keys()) == b'string': # 或者用decode()
v = r.get(k)
r_new.set(k, v)
print(v.decode())
elif r.type(r.keys()) == b'hash':
keys = r.hgetall(k)
for kk, vv in keys.items():
r_new.hset(k, kk, vv)
5. 开发接口
- mock(模拟)接口的用处
1) 暂时代替第三方接口
2) 辅助测试:用来代替没有开发好的接口
3) 查看数据
2. 需先安装flask模块:pip install flask
import flask
from conf import config
import json
from lib.tools import op_mysql
# import tools # tools.op_mysql() # 接口,后台服务 server = flask.Flask(__name__) @server.route('/get_user', methods=['get', 'post']) # 这句话表示这个函数变身为接口
def get_all_user():
sql = 'select * from users;'
response = op_mysql(host=config.HOST, user=config.USER, password=config.PASSWORD, db=config.DBNAME, port=config.PORT,
charset='utf8', sql=sql)
res = json.dumps(response, ensure_ascii=False, indent=4)
return res @server.route('/add_user', methods=['post'])
def add_users():
user = flask.request.values.get('user')
passwd = flask.request.values.get('passwd')
print(user, passwd)
if user and passwd:
sql = "insert into users values('%s','%s');" % (user, passwd)
op_mysql(host=config.HOST, user=config.USER, password=config.PASSWORD, db=config.DBNAME, port=config.PORT,
charset='utf8', sql=sql)
response = {'code': 200, 'msg': '操作成功'}
else:
response = {'code': 503, 'msq': '必填参数未填'}
return json.dumps(response, ensure_ascii=False) # host='0.0.0.0' 代表一个局域网内的所有人都可以访问;加上debug:不需要重启服务
server.run(port=8888, host='0.0.0.0', debug=True)
在postman中访问这两个接口
第6课:datetime模块、操作数据库、__name__、redis、mock接口的更多相关文章
- 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库
MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...
- 第二百七十九节,MySQL数据库-pymysql模块操作数据库
MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...
- MySQL数据库-pymysql模块操作数据库
pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connect() 参数: host=数据库ip port= ...
- python五十四课——datetime模块
3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...
- pymysql模块操作数据库
pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数 使用方式: 模块名称.connect() 参数: host=数据库ip po ...
- 利用PyMySQL模块操作数据库
连接到数据库 import pymysql # 创建链接得到一个链接对象 conn = pymysql.Connect( host="127.0.0.1", # 数据库服务器主机地 ...
- 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库
引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...
- 基于python3.x,使用Tornado中的torndb模块操作数据库
目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...
- 调用pymysql模块操作数据库
1.创建数据库表: def create_table(tb_name): import pymysql#导入模块 #连接数据库 db = pymysql.Connect(','zabbix_db') ...
- pymysql模块操作数据库及连接报错解决方法
import pymysql sql = "select host,user,password from user" #想要执行的MySQL语句 #sql = 'create da ...
随机推荐
- netty6---序列化与反序列化
package com.cn; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ja ...
- [转]将Eclipse设置为黑色主题 方式一
将Eclipse设置为黑色主题 觉得黑色的主题&配色很高大上,于是花了点时间实践出下面一种方法. 修改代码编辑区配色 修改整个软件主题 先上成果图: 但是进度条依旧是白色的,不知道怎么弄了╮( ...
- Windows下Yii2框架的两种安装方式及升级最新版
第一种:归档文件形式安装(适合于没有安装composer的机器) 进入下载页https://www.yiiframework.com/download,选择下载第一个 下载完成之后是一个压缩包,解压文 ...
- wix toolset 用wixui 默认中文
light.exe .\test.wixobj -ext WixUIExtension -ext WixUtilExtension -cultures:zh-CN
- Helloworld.JaVa 第一次编程
package Jc; class Jc1st { public static void main(String[] args) { System.out.println("Hello Wo ...
- 20145333《Java程序设计》课程总结
每周读书笔记链接汇总 第一周学习总结 第二周学习总结 第三周学习总结 第四周学习总结 第五周学习总结 第六周学习总结 第七周学习总结 第八周学习总结 第九周学习总结 第十周学习总结 实验报告链接汇总 ...
- 2017阿里C++研发工程师-校招-单词匹配
题目描述 给一个字符串, 然后给一个字典. 把字符串分解成字典里的单词组成的句子, 请输出所需空格最少的方案.并输出该方案. 样例 例如: 字符串为: str="ilikealibaba&q ...
- Ansible Playbooks 常用模块
官网链接:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html ansible python module ...
- java直接计算一个算术题
import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptE ...
- win7打开ftp步骤
FTP是很方便文件传输的功能 打开ftp xftp连接 传输测试 如果连接不通的话,有可能是防火墙的问题