0
点赞
收藏
分享

微信扫一扫

python定时重跑获取数据

树下的老石头 2023-02-01 阅读 75

做大数据的童鞋经常会写定时任务跑数据,由于任务之间的依赖(一般都是下游依赖上游的数据产出),所以经常会导致数据获取失败,因为很多人发现数据失败后

都会去查看日志,然后手动去执行自己的任务。下面我实现了一个自动重复执行去数据库取数,如果失败后自动重新去获取,直到把数据获取到。

建数据表:

1 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代码的实现

1 #!/usr/bin/env python
2 #-*- 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()

python定时重跑获取数据_sql

自己可以手动执行,在代码执行到第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

OVER!



举报

相关推荐

0 条评论