一个python做得数据库同步

最近在做python的项目,那么今天也来介绍下python的一个项目。首先先讲一下python的特点:其实python本身主要不是为了网络开发而设计的。至于现在很多web开发python用得广泛,主要还是因为python起步容易,上手快,代码易读性很高。但是值得一说的是,真正用python做项目时,其逻辑也很复杂,并不都是那么简单。这里介绍一个数据库同步的python项目:

# -*- coding: utf-8 -*-
#‘‘‘
#Created on 2015-1-5
#@author: lianghongwei
#‘‘‘
import datetime,sys
sys.path.append(‘/home/lianghongwei/test/src/information_platform‘)
from settings import MYSQL_ROOT_PASSWORD
from base.utils.json_utils import json_loads
from base.utils.mysql_utils import get_cursor

class 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框架的时候,项目就没那么简单了!

时间: 2024-07-31 21:45:38

一个python做得数据库同步的相关文章

一个简单的MySQL数据库同步脚本

Talk is cheap,show you code. 1 mysqldump -h[remoteHost] -u[username] -p[password] -P[port] --databases [databasename1] [databasename2] > [D:\mysqlsync\temp.sql] 2 echo "备份完成"; 3 mysql -u[root] -p[123456] -h[localhost] < [D:\mysqlsync\temp.

用Python做一个知乎沙雕问题总结

用Python做一个知乎沙雕问题总结 松鼠爱吃饼干2020-04-01 13:40 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 数据森麟 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 这两天偶然上网的时候,被知乎上一个名为“玉皇大帝住在平流层还是对流层”的问题吸引,本以为只是小打小闹,殊不知这个问题却在知乎上引发了强烈共鸣,浏览次数500W+,

用python做一个搜索引擎(Pylucene)

什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般使用爬虫):然后信息整理模块对采集的信息进行分词.去停用词.赋权重等操作后建立索引表(一般是倒排索引)构成索引库:最后用户查询模块就可以识别用户的检索需求并提供检索服务啦. 图1  搜索引擎的一般结构 2.  使用python实现一个简单搜索引擎 2.1  问题分析 从图1看,一个完整的搜

Python使用MySQL数据库的方法以及一个实例

使用环境:Windows+python3.4+MySQL5.5+Navicat 一.创建连接 1.准备工作,想要使用Python操作MySQL,首先需要安装MySQL-Python的包,在Python 3.x下,该包已经改名为MySQLClient.可以使用pip方式安装: pip install MySQLClient 或者下载包文件,进行安装也可以. 2.Python使用MySQL的流程: 3.启动MySQL服务器:以管理员身份启动“cmd”,输入命令:’net start mysql‘ P

从Apache的日志文件收集和提供统计数据(一个Python插件架构的简单实现)

从Apache的日志文件收集和提供统计数据 这一章我们将介绍基于插件程序的架构和实现.作为例子,我们将构建一个分析Apache服务器log文件的框架.这一次我们不再使用单片机的方式来创建,而是改为采用模块化的方式.一旦我们有了一个基本框架,我们就可以为它创建一个插件.这个插件可以基于请求者的地理位置执行分析. 程序的结构和功能 在数据维护和统计收集领域,很难有一个单一的应用程序可以适合多个用户的需求.让我们以分析Apache的web服务器日志文件为例.web服务器接受到的每一个请求都被记录在日志

【转】python操作mysql数据库

python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载

python之MySQL数据库

一.数据库概述 1.什么是数据库? 什么是数据库呢? 先来看看百度怎么说的 1 2 数据库,简而言之可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓"数据库"系以一定方式储存在一起.能予多个用户共享.具有尽可能小的冗余度.与应用程序彼此独立的数据集合. 百度的貌似不好理解啊,让我说啊,数据库是存储数据的地方,你这不是废话么?你你你你你说的对,哈哈,存数据的地方是存在哪里呢,存在硬盘上,为什么不是存在内存里面,因为内存无法永久保存

Python 操作 MySQL 数据库

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载不同的DB API模块,例如你需要

SymmetricDS 异构数据库同步软件部署案例

SymmetricDS是一个开源的同步软件,该软件是基于java环境编写的,在运行的时候需要安装JDK.SymmetricDS可以同步文件和数据库,本文的重点是数据库方面的同步. SymmetricDS支持多种数据库的同步,支持的数据库如下: Oracle, MySQL, MariaDB, PostgreSQL, MS SQL Server (including Azure), IBM DB2, H2, HSQLDB, Derby, Firebird, Interbase, Informix,