def get_adcode(city): """ 根據城市獲取區域編碼 :param city: :return: """ db = dbTool.conDB(dbTool.MYSQLDB, dbTool.MYSQLDBNAME) sql = "SELECT adcode,dispname,lft,rgt,dep FROM citycode_rela WHERE dispname LIKE '"+city+"%'" result = list(db.query(sql)) if not result: return result else: adlist = [] for addict in result: param1 = {'adcode': addict['adcode'], 'dispname': addict['dispname'], 'lft': addict['lft'], 'rgt': addict['rgt']} if addict['rgt'] - addict['lft'] > 1: #根據左右值判斷是不是最後一級 sql1 = "" if addict['dep'] == 3: #判斷是不是第三級,如何濟南市 淄博市,用來取省份 sql1 += " SELECT $adcode AS adcode,$dispname AS dispname,dispname AS supername " \ "FROM citycode_rela WHERE lft<$lft AND rgt>$rgt AND dep=2 UNION" #取出該級下的全部下一級 sql1 += " SELECT adcode,dispname,$dispname AS supername FROM citycode_rela WHERE lft>$lft AND rgt<$rgt " adlist.extend(list(db.query(sql1, vars=param1))) else: # 最後一級 #用來取省份 sql2 = "SELECT dispname AS supername,$adcode AS adcode,$dispname AS dispname " \ "FROM citycode_rela WHERE lft<$lft AND rgt>$rgt AND dep=2" adlist.extend(list(db.query(sql2, vars=param1))) return sorted(adlist, key=lambda x: x['adcode'], reverse=False)
res = get_adcode('山東')
for item in res:
print ''.join([item['supername'],'-',item['dispname'],'-',str(item['adcode'])])html
結果: sql
山東省-濟南市-370100
山東省-歷下區-370102
山東省-市中區-370103
山東省-槐蔭區-370104
山東省-天橋區-370105
山東省-歷城區-370112
山東省-長清區-370113ide
.....編碼
res = get_adcode('濟南')
for item in res:
print ''.join([item['supername'],'-',item['dispname'],'-',str(item['adcode'])])spa
結果:code
山東省-濟南市-370100
濟南市-歷下區-370102
濟南市-市中區-370103
濟南市-槐蔭區-370104
濟南市-天橋區-370105
濟南市-歷城區-370112htm
res = get_adcode('歷下區')
for item in res:
print ''.join([item['supername'],'-',item['dispname'],'-',str(item['adcode'])])blog
結果:ci
山東省-歷下區-370102get
參考數據:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html