本文给大家分享基于 python 写的一个定时重跑获取数据库数据的方法,非常不错,具有参考借鉴价值,需要的朋友参考下
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
做大数据的童鞋经常会写定时任务跑数据,由于任务之间的依赖(一般都是下游依赖上游的数据产出),所以经常会导致数据获取失败,因为很多人发现数据失败后
都会去查看日志,然后手动去执行自己的任务。下面我实现了一个自动重复执行去数据库取数,如果失败后自动重新去获取,直到把数据获取到。
建数据表:
- CREATE TABLE `testtable` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `name` varchar(20) NOT NULL, 4 PRIMARY KEY (`id`) 5 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
开始的时候数据表是空的,等到脚本重试第 3 秒的时候像数据库插入数据。
以下是 python 代码的实现
- # ! /usr/bin / env python# - *-coning: utf - 8 - *-3 4 import MySQLdb 5 from time import sleep 6 7 class GetData(object) : 8 def __init__(self) : 9 self.conn = ''10 self.host = '127.0.0.1'11 self.port = 3306 12 self.user = 'root'13 self.passwd = '123456'14 self.db = 'test'15 self.cnum = 5#set retry number 16 17 def init_connect(self) : 18 self.conn = MySQLdb.connect(host = self.host, user = self.user, passwd = self.passwd, db = self.db, port = self.port, 19 charset = 'utf8') 20 21 def get_data(self) : 22 self.init_connect 23 cur = self.conn.cursor 24 sql = "select * from testtable"25 cur.execute(sql) 26 rs = cur.fetchall 27 cur.close 28 self.conn.close 29
- return rs 30 31 def run(self) : 32 count = 1 33
- while (count <= self.cnum) : 34 rs = self.get_data 35
- if len(rs) > 0 : 36 print len(rs) 37
- break 38 39 print count 40 sleep(10) 41 count += 1 42 43
- if __name__ == '__main__': 44 gd = GetData 45 gd.run
自己可以手动执行,在代码执行到第 3 秒的时候,执行下面的 sql
- insert into testtable(`name`) values('123'),
- ('456'),
- ('789'),
- ('1111'),
- ('3222'),
- ('444');
下面是定时的任务的脚本
- 00 08 * **cd / home / python / lsh_sync;
- python getdata.py >> getdata.log 2 > &1
以上所述是小编给大家介绍的 Python 写的一个定时重跑获取数据库数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0318/319071.html