操作数据库的一般步骤:

1、建立连接:ip、端口号、用户名、密码、数据库

2、建立游标

3、执行sql

4、获取结果

conn = pymysql.connect(host,user,password,port,db,charset='utf8') #port这里一定要写int类型;charset必须写utf8,不能写utf-8

cur = conn.cursor() #建立游标

cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #指定返回结果为字典类型,更便于取值(对于fetchone()方法直接返回字典类型数据,而对于fetchall()方法返回list,list的每一条数据便是字典类型)

cur.execute(sql) #执行sql语句

cur.executemany(sql) #可传入一个二维数据,会循环将值传入sql中去执行

conn.commit() #除查询语句外,增删改操作都需要再执行该语句进行提交

cur.fetchall() #获取sql语句执行的结果,它把结果放到一个元组里,每一条数据也是一个元组

cur.fetchone() #只获取一条结果,它的结果是一个一维元组

cur.scroll(0,mode='absolute') #移动游标,直接到最前面

cur.scroll(0,mode='relative') #移动游标,相对于当前位置的,正数表示往后移,负数表示往前移

cur.close() #关闭游标

conn.close() #关闭连接

操作Redis:

r = redis.Redis(host,port,password,db=2) #连上redis

r.set('saq_session','12345678910') #set数据

r.get('saq_session') .decode() #get数据,redis里面取出来的数据都是bytes类型的,所以要用.decode()方法转成字符串

r.delete('saq_session') #删除一条数据

r.setex('saq','18',10) #可以指定key的失效时间,单位是秒

#set、get、delete、setex都是针对string类型的

hash类型操作:

r.hset('sessions','saq','123456') #插入数据

r.hset('sessions','wxy','123456')

r.hset('sessions','wdd','123456')

r.hget('sessions,'wxy') #获取数据

redis_data = r.hgetall('sessions') #获取到hash类型里面所有的数据

all_data = {}

for k,v in redis_data.items(): #把hash类型里面所有的数据转成正常的字典,否则里面的数据均是bytes类型

  k = k.decode()

  v = v.decode()

  all_data[k] = v

#hash类型没有过期时间

下面这种是有层级的,即前面的每一个冒号代表一层文件夹

r.set('wjj1:wjj2:xyy','hehe') 

r.keys() #获取所有的key

r.keys('wy*') #模糊匹配,获取以wy开头的key

r.type('saq') #获取key的类型

把redis里面一个数据库的东西,迁移到另外一个数据库里:

src_redis = redis.Redis(host=ip,port=6379,password=pwd,db=2)#连上redis
target_redis = redis.Redis(host=ip,port=6379,password=pwd,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

mock接口开发:

import flask

#接口,后台服务

server = flask.Flask(__name__) #把当前这个Python文件当成一个server

@server.route('/get_user',methods=['get','post'])

def get_all_user():

  ......  #这里写自己的代码,比如查询数据库获取数据

  return "这是结果哈" #return的时候只能return字符串

@server.route('/add_user',methods=['post'])

def add_user() :

  user_id = flask.request.values.get('id') #这里的参数就是调用接口的时候传入的参数

  username= flask.request.values.get('name')

  if user_id and username:

    ......  #这里写自己的代码,比如连接数据库插入数据

    response = {'code':308,'msg':'添加成功'}

  else:

    response = {'code':503,'msg':'必填参数未填'}

  return json.dumps(response,ensure_ascii=False) #return的时候只能return字符串

server.run(port=8080,debug=True)

server.run(port=8080,host='0.0.0.0',debug=True) #host 0.0.0.0代表一个局域网里面所有人都可以访问

不同目录下的文件导入解决:

import sys,os

BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #取到工程目录

sys.path.insert(0,BASE_PATH) #加入环境变量(sys.path返回的是一个list )

 

posted on 2018-01-25 19:10  艾谁谁  阅读(80)  评论(0)    收藏  举报