1. 程式人生 > >信息統計DashBoard踩坑總結

信息統計DashBoard踩坑總結

mysql 字典 urllib

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


本文出自 “10917734” 博客,請務必保留此出處http://10927734.blog.51cto.com/10917734/1959827

信息統計DashBoard踩坑總結