day06

1、datetime模块
import datetime
import time
# print(datetime.datetime.today()) #当前时间,到秒
# print(datetime.datetime.now()) #和today一样
#
# print(datetime.datetime.today().strftime('%Y-%m-%d')) #格式化好的时间
# print(datetime.datetime.today()+datetime.timedelta(3)) #取3天后的
# print(datetime.datetime.today()+datetime.timedelta(-3)) #取3天前的
# print(datetime.date.today()) #去当天的日期,只是日期
today = datetime.date.today()
yesterday = datetime.date.today()+datetime.timedelta(-1)
abc = [today,yesterday]
print(abc)
2、clean日志
import os,datetime
def clean_log(path):
if os.path.exists(path) and os.path.isdir(path):
today = str(datetime.date.today())
yesterday = str(datetime.date.today()+datetime.timedelta(-1))
befor_yesterday = str(datetime.date.today()+datetime.timedelta(-2))
file_name_list = [today,yesterday,befor_yesterday]
for file in os.listdir(path):
file_name_sp = file.split('.')
if len(file_name_sp)>2:
file_date = file_name_sp[1]
if file_date not in file_name_list:
abs_path = os.path.join(path,file)
print('删除的文件是%s'%abs_path)
os.remove(abs_path)
clean_log(r'logs')
3、op_mysql
import pymysql
# pyoracle

# 1、连接上mysql ip 端口号 密码 账号 数据库
# 2、建立游标
# 3、执行sql
# 4、获取结果
# 5、关闭连接、关闭游标
#打开仓库大门
conn = pymysql.connect(host='211.149.218.16',
user='jxz',passwd='123456',#port这里一定要写int类型
port=3306,db='jxz',charset='utf8') #charset必须写utf8,不能写utf-8
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标,游标你就认为是仓库管理员
# sql = "INSERT INTO `bt_stu` ( `real_name`, `sex`, `phone`, `class`, `type`) VALUES ('小黑', '1', '18612341241', '靠山屯', '1');"
sql = 'select * from bt_stu limit 5;'
cur.execute(sql) #执行sql语句
conn.commit() #提交
# update delete insert 需要提交
# res = cur.fetchall() #获取sql语句执行的结果,它把结果放到一个元组里,每一条数据也是一个元组
res = cur.fetchall() #只获取一条结果,它的结果是一个1维元组
print(res)
# print('fetchall',cur.fetchall())
# cur.scroll(0,mode='absolute')#移动游标,到最前面
# cur.scroll(3,mode='relative')#移动游标,相对于当前位置的
#只有一条数据,那么就用fetchone,超过一条数据那就用fetchall
cur.close() #关闭游标
conn.close() #关闭连接
4、操作redis
import redis
r = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连上redis
print(r.get('hahahsfdfsdf'))
#r.set('nhy_session','201801211505') #set数据
# print(r.get('马佩佩').decode()) #redis里面取出来的数据都是bytes类型的,所以要用.decode方法转成字符串
# r.delete('马佩佩')#删除一个
#r.setex('nhy','hahah',20) #可以指定key的失效时间,单位是秒‘
# set get delete setex 都是针对string类型的 k - v
#hash类型
# r.hset('sessions','nhy','123456') #插入数据
# r.hset('sessions','ybq','1234562')
# r.hset('sessions','xsr','1234561')
#print(r.hget('sessions','xsr')) #获取数据
# redis_data = r.hgetall('sessions') #获取到hash类型里面所有的数据
# all_data = {}
# for k,v in redis_data.items(): #把hash类型里面所有的数据转成正常的字典
# k = k.decode()
# v = v.decode()
# all_data[k]=v
#hash类型没有过期时间

#下面这种是有层级的
# r.set('txz:ybq','没交') #
# r.set('txz:haixia','交了') #
# print(r.keys())#获取所有的key
# print(r.keys('txz*')) #以txz开头的key
# print(r.type('sessions'))#获取key的类型

# 把redis里面一个数据库的东西,弄到另外一个数据库里。
# 1、建立两个redis连接
#1、src
# 2、 target
#2、获取到所有的key,kyes ()
# 3、判断key的类型,string hash
5、redis迁移
import redis
src_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连上redis
target_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=14)#连上redis
for key in src_redis.keys():
if src_redis.type(key) == b'string': #判断key的类型,因为redis数据取出来都是二进制的,所以这里也用bytes
v = src_redis.get(key) #先获取到原来的数据
target_redis.set(key,v) #再set到新的里面
else:
all_hash_data = src_redis.hgetall(key) #先获取到hash类型里面所有的数据
for k,v in all_hash_data.items(): #因为hash类型的获取到之后是一个字典,所以这里循环字典
target_redis.hset(key,k,v) #key是外面的大key,k是里面的小k,v就是小k对应的value
6、tools.py
import pymysql,redis
def op_mysql(host,user,password,db,sql,port=3306,charset='utf8'):
conn = pymysql.connect(host=host,user=user,
password=password,
port=port,
charset=charset,db=db)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
sql_start = sql[:6].upper() #取sql前6个字符串,判断它是什么类型的sql语句
if sql_start=='SELECT' :
res = cur.fetchall()
else:
conn.commit()
res = 'ok'
cur.close()
conn.close()
return res

def op_redis(host,password,k,v=None,port=6379,db=0):
r = redis.Redis(host=host,password=password,port=port,db=db)
if v:
r.set(k,v)
res = 'ok'
else:
res = r.get(k)
if res: #这里是判断有没有get到数据
res = res.decode()
else:
res = None
return res
# print(__name__)
# print('哈哈哈哈,我在这里头')
if __name__=='__main__':
#别人导入这个python文件的时候,下面的代码不会被执行
#自己测试的时候用
# print(__name__) # __main__
# print('哈哈哈哈哈哈 到底有没有执行')
sql = 'select * from bt_stu limit 5;'
sql2 = 'update bt_stu set class="天蝎座3" where id=503;'
res = op_mysql(
host='211.149.218.16',
user='jxz',password='123456',#port这里一定要写int类型
port=3306,db='jxz',charset='utf8',sql=sql2)
print(res)
7、nhy
import tools

username = input('plz enter user:').strip()
passwd = input('plz enter passwd:').strip()

# {'lcz':'123456',''}yb
sql = 'select * from user where username="%s";'%username
res = tools.op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
if res:
# sql2 = 'select * from user where username="%s" and password="%s"'%(username,passwd)
if passwd == res[0]['password']:
print('登录成功')
else:
print('用户不存在')

8、app.py
import flask,json
from tools import op_mysql #op_mysql()
# 接口,后台服务
server = flask.Flask(__name__) #把咱们这个app这个python文件当做一个server
@server.route('/get_user',methods=['get','post'])
def get_all_user():
sql = 'select * from stu;'
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = json.dumps(res,ensure_ascii=False) #把list转成json
return response #return 的时候只能return字符串

@server.route('/add_user',methods=['post'])
def add_user():
user_id = flask.request.values.get('id') #这里的参数就是调用接口的时候传入的参数
username = flask.request.values.get('u') #
if user_id and username:
sql = "insert into stu values ('%s','%s');"%(user_id,username)
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = {'code':308,'msg':'添加成功'}
else:
response = {'code':503,'msg':'必填参数未填!'}
return json.dumps(response,ensure_ascii=False)
server.run(port=8080,debug=True)
9、api\bin\start.py
import sys,os
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #取到工程目录
sys.path.insert(0,BASE_PATH)#加入环境变量

from lib.main import server

server.run(port=8989,host='0.0.0.0',debug=True)

#host 0.0.0.0 代表一个局域网里面所有人都可以访问。
10、api\conf\setting.py
MYSQL_HOST = '211.149.218.16'
PASSWORD = '123456'
PORT = 3306
USER = 'jxz'
DB = 'jxz'
11、api\lib\main.py
import flask,json,pymysql
from lib.tools import op_mysql #op_mysql()
# 接口,后台服务
server = flask.Flask(__name__) #把咱们这个app这个python文件当做一个server
@server.route('/get_user',methods=['get','post'])
def get_all_user():
sql = 'select * from my_user;'
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = json.dumps(res,ensure_ascii=False) #把list转成json
return response #return 的时候只能return字符串

conn = pymysql.connect(host='211.149.218.16', port=3306, user='jxz', passwd='123456', db='jxz',charset='utf8')
cursor = conn.cursor()
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute("select * from my_user;")
res2 = cursor.fetchall()
all_users = {} #存放所有的用户
for i in range(len(res2)):
all_users[res2[i]['username']] = res2[i]['money']
print(all_users)

@server.route('/add_money',methods=['post'])
def add_user():
username = flask.request.values.get('u') #这里的参数就是调用接口的时候传入的参数
money = flask.request.values.get('m') #
if username and money:
if username in all_users:
money_db = all_users[username]
money_db = int(money_db)
if money.isdigit() and money_db> int(money):
sql = "UPDATE my_user set money = money-%s where username = '%s';" % (money, username)
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = {'code': 308, 'msg': '更新成功'}
elif money.count('.') == 1:
s_list = money.split('.') # [1,5] [-s,55]
left = s_list[0] # -s ['','s']
right = s_list[1]
if left.isdigit() and right.isdigit():
sql = "UPDATE my_user set money = money-%s where username = '%s';" % (money, username)
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = {'code': 308, 'msg': '更新成功'}
else:
response = {'code': 503, 'msg': '输入的为非正数、正小数或者大于存款的金额!'}
else:
sql = "insert into my_user(username,money) VALUES ('%s','%s');"%(username,money)
res = op_mysql(
host='211.149.218.16',
user='jxz', password='123456', # port这里一定要写int类型
port=3306, db='jxz', charset='utf8', sql=sql)
response = {'code':308,'msg':'添加成功'}
else:
response = {'code':503,'msg':'必填参数未填!'}
return json.dumps(response,ensure_ascii=False)

# server.run(port=8080,debug=True)
12、api\lib\tools.py
import pymysql,redis
from conf import setting
def op_mysql(sql):
conn = pymysql.connect(host=setting.MYSQL_HOST,user=setting.USER,
password=setting.PASSWORD,
port=setting.PORT,
charset='utf8',db=setting.DB)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
sql_start = sql[:6].upper() #取sql前6个字符串,判断它是什么类型的sql语句
if sql_start=='SELECT' :
res = cur.fetchall()
else:
conn.commit()
res = 'ok'
cur.close()
conn.close()
return res

def op_redis(host,password,k,v=None,port=6379,db=0):
r = redis.Redis(host=host,password=password,port=port,db=db)
if v:
r.set(k,v)
res = 'ok'
else:
res = r.get(k)
if res: #这里是判断有没有get到数据
res = res.decode()
else:
res = None
return res

# print(__name__)
# print('哈哈哈哈,我在这里头')
if __name__=='__main__':
#别人导入这个python文件的时候,下面的代码不会被执行
#自己测试的时候用
# print(__name__) # __main__
# print('哈哈哈哈哈哈 到底有没有执行')
sql = 'select * from bt_stu limit 5;'
sql2 = 'update bt_stu set class="天蝎座3" where id=503;'
res = op_mysql(
host='211.149.218.16',
user='jxz',password='123456',#port这里一定要写int类型
port=3306,db='jxz',charset='utf8',sql=sql2)
print(res)
13、api\readme.md
#这个是程序是xx接口。
#依赖:flask、pymysql、python3
# pip install flask
# pip install pymysql
# python bin/start.py


 

 

 

 

 

 

posted @ 2018-01-26 01:25  zfzhp  阅读(141)  评论(0编辑  收藏  举报