pymysql又莫名踩到一个坑

in #cn-dev6 years ago

通过跑前几天的脚本,发现网络不稳定会导致区块数据同步不全,因此还需要写一个守护脚本,定期去检查下未完成的区块,并完成同步。

但在写的过程中发现了一个坑,目前还没有找到触发的原因,临时找到了解决方案。

下面就是简化版的问题代码:

#!/usr/bin/python3
#encoding:UTF-8
import sys, time
from contextlib import suppress
import pymysql
# init db
try:
    conn = pymysql.connect(
        host = "steem-lightdb.com",
        user = "steem",
        password = "steem",
        database = "steemdb",
        charset = 'utf8',
        cursorclass = pymysql.cursors.DictCursor)
    #conn.autocommit(True)
except Exception as e:
    print('[warning] DB connection failed', e)
    sys.exit()

def getLatestBlockNumFromDB():
    global conn
    sql = '''
    Select block_num from blocks
    Order by block_num desc limit 1;
    '''
    try:
        with conn.cursor() as cursor:
            cursor.execute(sql)
            result = cursor.fetchone()
            if result:
                return int(result['block_num']) + 1
            else:
                return 1
        conn.commit()
    except Exception as  e:
        print('[warning]get latest block num error', e)
        return 1

def run():
    while True:
        latest_block_num = getLatestBlockNumFromDB()
        print(latest_block_num)
        time.sleep(3)

if __name__ == '__main__':
    with suppress(KeyboardInterrupt):
        run()

问题 :每次获取最新的区块号,总是一样的,就像被 cache 了一样。手动 commit 没有效果。

临时解决方案 :把 autocommit 打开即可。

参考:https://github.com/PyMySQL/PyMySQL/issues/76

等以后有机会再解决吧。。。


欢迎使用 SteemMention 获取最新的 Steem 回复提醒。


欢迎使用 SteemEditor 来编写文章,最好用的 Steem 编辑器,没有之一!!!


感谢你的阅读,我是中文区见证人之一,欢迎通过 SteemConnect 来给我投票,或者打开 https://steemit.com/~witnesses/ 页面,输入 ety001 进行投票。

2.gif

中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票


Thank you for reading. I'm a witness. I would really appreciate your witness vote! You can vote by SteemConnect. Or open https://steemit.com/~witnesses page, input ety001 to vote.

2.gif

Sort:  

你好请接受cn区点赞机器人 @cnbuddy 对你作为cn区一员的感谢。假如我的留言打扰到你,请回复“取消”。

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64498.18
ETH 3079.08
USDT 1.00
SBD 3.86