標籤:
最近在做python的項目,那麼今天也來介紹下python的一個項目。首先先講一下python的特點:其實python本身主要不是為了網路開發而設計的。至於現在很多web開發python用得廣泛,主要還是因為python起步容易,上手快,代碼易讀性很高。但是值得一說的是,真正用python做項目時,其邏輯也很複雜,並不都是那麼簡單。這裡介紹一個資料庫同步的python項目:
# -*- coding: utf-8 -*-#‘‘‘#Created on 2015-1-5#@author: lianghongwei#‘‘‘import datetime,syssys.path.append(‘/home/lianghongwei/test/src/information_platform‘)from settings import MYSQL_ROOT_PASSWORDfrom base.utils.json_utils import json_loadsfrom base.utils.mysql_utils import get_cursorclass DataRsync: def __init__(self,the_date): self.game_list_url = ‘http://bugu.163.com/UG/AgentGameList‘ #擷取遊戲列表的連結,參數gid,為-1時,返回id為最大的10個遊戲 self.game_info_url = ‘http://bugu.163.com/UG/AgentGameInfo‘ #參數gid,type(1代表GAC,2代表SDC) POST的 #擷取資料庫連接遊標#通過ajax從外部連結訪問到資料 def __post_get_data(self,url,para): import urllib,urllib2 params = urllib.urlencode(para) #print url,params response = urllib2.urlopen(url,params) data_string = response.read()# print data_string return json_loads(data_string)
#資料的處理,這裡是拿到資料後的處理函數,後面會重點講這個方法 def __save_data(self,data_id): cur=get_cursor(‘info_app‘) try: if data_id: cur.execute(‘select id from industry_library_agent_game where name=%s‘,data_id[‘game_name‘])# industry_library_agent_game_review result=cur.fetchone() if result: data = self.__post_get_data(self.game_info_url,{‘gid‘:data_id[‘gid‘],‘type‘:1})# industry_library_agent_game_review values = [ data[‘info‘][‘inno‘],data[‘info‘][‘inno_res‘], data[‘info‘][‘core‘],data[‘info‘][‘core_res‘], data[‘info‘][‘biaoxia‘],data[‘info‘][‘biaoxian_res‘], data[‘info‘][‘consume‘],data[‘info‘][‘consume_res‘], data[‘info‘][‘shangshou‘],data[‘info‘][‘shangshou_res‘], data_id[‘gid‘]] sql =‘update industry_library_agent_game_review set bg_inno_res=%s,bg_core_res=%s,bg_biaoxian_res=%s,bg_consume_res=%s,bg_shangshou_res=%s where id=%d‘ cur.execute(sql,values) print values else: print data_id[‘game_name‘] #cur.executemany(‘insert into industry_library_agent_game (bg_info,bg_nno) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)‘,values) except: pass def __resave_data(self,fid): data_id=self.__post_get_data(self.game_list_url,{‘gid‘:fid}) #print data_id for i in range(len(data_id[‘info‘])): #print len(data_id[‘info‘]) print i self.__save_data(data_id[‘info‘][i]) if i<9: return False else: print 666 self.__resave_data(data_id[‘info‘][i][‘gid‘])
#calData方法,用來訪問資料 def calcData(self): data_id=self.__post_get_data(self.game_list_url,{‘gid‘:-1}) for i in range(len(data_id[‘info‘])): #print len(data_id[‘info‘]) self.__save_data(data_id[‘info‘][i]) self.__resave_data(data_id[‘info‘][i][‘gid‘])
#代碼運行入口 if __name__ == "__main__": now = datetime.date(2013,7,9) t = DataRsync(now) t.calcData()
那麼這個項目本身很簡單,但是其實用到的東西並不少,首先,是載入模組,python載入模組跟c++很像,都是引入檔案名稱,from A import B其實就是在a檔案中引入B模組。很好理解吧。接下來是我們構造一個類,並在類中建立方法,第一個方法是通過ajax訪問外部資料,這裡也很簡單,調用urlopen這個api,訪問到資料。接下來是函數的核心部分,拿到資料並處理。這裡用sql語句就好,拿到後也很簡單,這裡只有 一個很簡單的邏輯,就是判斷是否已經存在於我方資料庫,如果存在,則updata,不存在就不更新。接下來是入口函數,調用我們的類裡面的方法。最後是執行入口。這是python裡面一個很簡單的程式,簡單易懂。但是如果在做大項目時,尤其用到django架構的時候,項目就沒那麼簡單了!
一個python做得資料庫同步