1.起因
在做一个自动打卡的玩意。登录会得到那个平台一系列的信息。我又不想专门修改、增加数据库字段来存放,所有打算直接将返回的JSON数据保存到一个MySQL字段中。
内容肯定不能直接放,考虑下比如数据注入的问题,对吧,容易出问题,所有我是打算将JSON数据转为base64编码的格式。
先写一个专门的编码工具函数
defBase64_encode(s): res=str(base64.b64encode(s.encode("utf-8"))).replace("b'","")[:-1] returnres
str(base64.b64encode(s.encode("utf-8")))
得到的是b'xxx'的文本,我不想要b'
和后面的'
,所有要替换到,然后数据库操作的话如下:
try: cur, db=db_connect() except: return {"code": 33060, "msg": "连接数据库失败", "data": {}} try: sql="update t_info set `token`='%s',`uid`='%s',`planids`='%s',`moguNo`='%s' where `gaccount`='%s'"%(Base64_encode(json.dumps(user_token)),user_id,Base64_encode(json.dumps(plan_ids)) ,moguNo,tel) print("\n",sql,"\n") result=cur.execute(sql) exceptExceptionase: print(e) return {"code":-1,"msg":"发生了错误"}
注意长度问题噢!varchar(255)容易装不下,所有太长了用text类型来装。
然后就是解码
defBase64_decode(s): returnbase64.b64decode(s).decode("utf-8")
总结一下:
defBase64_encode(s): res=str(base64.b64encode(s.encode("utf-8"))).replace("b'","")[:-1] returnresdefBase64_decode(s): returnbase64.b64decode(s).decode("utf-8")