文章内容
2020/7/29 10:10:53,作 者: 黄兵
Python 将directory数据存储到MySQL数据库
最近需要将python中的dict数据存储到数据库,但是如果这样写:
def notifications():
get_sub = json.loads(request.data)
endpoint = get_sub['endpoint']
keys = get_sub['keys']
try:
expirationTime = get_sub['expirationTime']
except KeyError:
expirationTime = ''
web_push_data = WebPushNotification(endpoint=endpoint, expirationTime=expirationTime,
keys=str(keys))
try:
db.session.add(web_push_data)
db.session.commit()
return jsonify({'result': 1})
except Exception as e:存入数据库的时候,始终会报错,如果这样写:
def notifications():
get_sub = json.loads(request.data)
endpoint = get_sub['endpoint']
keys = str(get_sub['keys'])
try:
expirationTime = get_sub['expirationTime']
except KeyError:
expirationTime = ''
web_push_data = WebPushNotification(endpoint=endpoint, expirationTime=expirationTime,
keys=str(keys))
try:
db.session.add(web_push_data)
db.session.commit()
return jsonify({'result': 1})
except Exception as e:将json数据变成字符串,存入数据库,问题是解决了,但是在读取数据的时候,会出现问题,读取的也是字符串,还要反序列化:
for item in get_all:
web_push_id = item[0]
endpoint = item[1]
keys = eval(item[3])这里使用了eval反序列化,其实这个函数有一定的危险性,如果对存入数据未作校验,存入数据存在恶意代码,将会被执行。所以在使用的时候需要非常小心。
有没有更好的办法,将存入的数据直接是json呢?
代码如下:
def notifications():
get_sub = json.loads(request.data)
endpoint = get_sub['endpoint']
keys = json.dumps(get_sub['keys'])
try:
expirationTime = get_sub['expirationTime']
except KeyError:
expirationTime = ''
web_push_data = WebPushNotification(endpoint=endpoint, expirationTime=expirationTime,
keys=str(keys))
try:
db.session.add(web_push_data)
db.session.commit()
return jsonify({'result': 1})
except Exception as e:这里直接将将 Python 对象编码成 JSON 字符串,就可以存入数据库了。
之后将已编码的 JSON 字符串解码为 Python 对象,具体代码如下:
for item in get_all:
web_push_id = item[0]
endpoint = item[1]
keys = json.loads(item[3])这样就可以避免这个安全隐患了。
参考资料:
2、How to store python dictionary in to mysql DB through python
黄兵个人博客原创。
Angular [innerHTML] styles不起作用
no component factory found,did you add it to @NgModule.entryComponents?
no component factory found,did you add it to @NgModule.entryComponents?
评论列表