最近根据需求用Tornado框架在写了一个从数据库统计Redis服务器的数量、内存等信息的接口,并写了一个从接口获取数据并推送至grafana进行展示的程序。现在已经实现所有功能,现将实现过程中遇到的问题总结出来,以便后续参考。欢迎批评指正,共同学习进步!
一、数据库操作中的坑
1、mysql查询中想要传入变量时like的使用
在数据库的查询操作中想要查找包含北京二字的字段,like的用法为:
idc like %北京%
在python操作mysql时,需要拼接字符串然后进行处理,这时的用法为:
idc like ‘%%%%%s%%%%‘
2、mysql嵌套查询中{ }的使用
在之前的mysql嵌套查询中我试图通过拼接字符串来实现,后来发现有如下用法:
ctime = ‘{y_day}‘
其中y_day即为需要传入的变量
二、字典相关
在从数据库中取到数据存入字典为unicode。如果直接打印字典为unicode编码,汉字无法识别,有两种解决办法:
for key,value in result_dic.items():
首先通过上述方法取到字典的key、value,然后输出或者拼接成字符串输出,这样都不会出现中文乱码问题
三、从Tornado获取数据中文乱码的问题
在实现了web框架之后,在浏览器输入url进行测试,未发现任何问题。但在代码中使用urllib模块调用函数,从接口获取到数据,中文传递会出现乱码,导致无法正确获取到数据,先怀疑是Tornado设置上的问题或者是urllib模块设置上的问题,但各种找都没有解决,后来请教同事解决了这一问题。主要原因是urllib编码问题,解决方法如下:
api_domain = ‘10.100.100.100:8080‘ args_dict = {‘type‘: ‘mechine‘, ‘pool_name‘: ‘none‘, ‘idc‘: ‘北京‘} url_v = urllib.urlencode(args_dict) url = "http://%s/?%s" % (api_domain, url_v) print url response = urllib2.urlopen(url) data = response.read() print json.dumps(data)
时间: 2024-11-07 14:27:21