python directory_Python 将directory数据存储到MySQL数据库

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])

这样就可以避免这个安全隐患了。

参考资料:

黄兵个人博客原创。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值