最近根据需求用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)