Python + MySQLDB 批量插入/更新同一数据库的两个实例
我正在处理两个数据库,一个是本地版本,另一个是服务器上的版本。服务器上的版本是最新的,而我不想把服务器上所有表里的所有数据都重新复制到我的本地版本。
我想逐个表地查看,只插入或更新那些已经改变的值,从服务器上把这些值复制到我的本地版本。
有没有什么简单的方法来处理这种情况?比如批量插入或更新?我在网上查了很多资料,但没找到合适的答案。我也尝试自己写代码,但在处理错误时遇到了一些麻烦。
我使用的是Python和MySQLDB... 感谢任何建议!
Steve
1 个回答
0
如果你所有表格里的记录都有时间戳,那你就能找出“服务器中发生了变化的值”——否则,你可能就不太清楚该怎么做这部分(这和插入或更新无关,而是关于“如何正确选择数据”)。
一旦你有了所有重要的值,somecursor.executemany
可以让你一次性处理这些值。根据你的索引设置,把数据放到一个没有索引的临时表里可能会更快,然后再从这个临时表中插入或更新到真正的表里(在删除临时表之前),后者当然只需要一个 somecursor.execute
。
你可以通过使用一个(或几个)线程来进行选择操作,并把结果放到一个 Queue.Queue
中,然后用几个工作线程把从队列中取出的结果应用到本地服务器上,这样可以减少整个任务的耗时。(在读取和写入线程之间找到最佳平衡,最好是试几次并测量一下——写入本身比读取慢,但你本地服务器的带宽可能比其他服务器高,所以这很难预测)。
不过,所有这些讨论都没有意义,除非你确实有一个策略来识别“服务器中发生了变化的值”,所以在这方面没有明确的策略之前,深入讨论后续的细节就不是很有用。