一個python做得資料庫同步

來源:互聯網
上載者:User

標籤:

最近在做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做得資料庫同步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.