添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱喝酒的葫芦  ·  hive sql 减法-掘金·  1 年前    · 
好帅的汤圆  ·  c++ - LoadLibrary ...·  1 年前    · 

如何使用python pandas更新mysql数据库中新增加的行,排除已经更新的行

1 人不认可

我有以下代码,可以批量更新mysql数据库。

count = pd.read_sql_query("SELECT count(*) FROM table",con=db)
count = count.iat[0,0]
batchsize = 1000
for offset in range(0,count,batchsize):
    df = pd.read_sql(('SELECT id,col2,col3 FROM table LIMIT %s OFFSET %s' 
                      % (batchsize,offset)), con=db)
    ## code ##
    cursor = db.cursor()
    cursor.executemany("UPDATE table SET col2=%s, col3=%s WHERE id=%s",d)
    db.commit()
db.close()   

在更新之后,如果有新的记录被添加到mysql数据库中,这些记录必须通过运行相同的脚本来更新。该代码在linux环境下以python脚本形式运行。

2 个评论
你的问题不清楚,你是否在寻找一旦有新行加入就会发生的事情?也就是一个触发器。为什么有些东西需要在添加后立即更新,当然添加过程也应该调整记录。
不 @AndyG, 不是一有新行加入就会更新。但在一些新的记录被添加后,如果我们运行脚本,只有那些新的记录会被更新。
python
mysql
linux
pandas
Abdul Quddus
Abdul Quddus
发布于 2018-01-23
1 个回答
Abdul Quddus
Abdul Quddus
发布于 2018-01-31
已采纳
0 人赞同

我已经创建了一个 pickle file 来保存一个表的行数。每次我运行脚本时,我从pickle文件中读取行数(在上一次执行时已经更新),然后从那里开始执行。我更新后的代码看起来像这样。

count = pd.read_sql_query("SELECT count(*) FROM table",con=db)
count = count.iat[0,0]
start = None
with open("pickle_file_name.pkl", 'rb') as f:
    start = pickle.load(f)
batchsize = 1000
for offset in range(start,count,batchsize):
    df = pd.read_sql(('SELECT id,col2,col3 FROM table LIMIT %s OFFSET %s' 
                      % (batchsize,offset)), con=db)
    ## code ##
    cursor = db.cursor()
    cursor.executemany("UPDATE table SET col2=%s, col3=%s WHERE id=%s",d)
    db.commit()
with open("pickle_file_name.pkl", 'wb') as f: