【问题标题】:Optimize data Upload (MySQL,Python)优化数据上传(MySQL、Python)
【发布时间】:2017-03-14 13:57:44
【问题描述】:

我的日常工作非常烦人。我必须将 csv 表上传到我们的数据库。 由于数据源有一个简单的 rest api,因此可以通过 JSON Url 请求所有数据。为此,我实现了一个小的 python 脚本,它加载 JSON 并将所有数据插入到我的数据库中。 问题是插入真的很慢(我预计不到 10 分钟)但 3 小时后我分手了。 这是我的代码(稍作改动以便更好地理解):

db = MySQLdb.connect(host="...",    # your host, usually localhost
                         user="...",                     # your username
                         passwd="...",                      # your password
                         db="...")                     # name of the data base
with db:
     cur = db.cursor()

JSONURL = URL[0][y]+URL2+URL3+URL4+URL5     
response = urllib.urlopen(JSONURL)
data = json.loads(response.read())
n=len(data["results"])-1
for z in range(0,n):
     with db:
          sql="INSERT INTO t_data (col1,col2,col3) VALUES("+data["results"][0]+","+data["results"][1]+","+data["results"][2]+")"
          cur.execute(sql)

如您所见,我使用 MySQL。也许我可以使用prepare语句(但我不知道它是否适用于python,如果是的话我该怎么做?) 是否可以更改 MySQL 的设置以获得更好的性能? 我期待任何帮助。

【问题讨论】:

  • 为什么不使用bulk-insert 而不是一次又一次地插入查询。这是它的链接dev.mysql.com/doc/refman/5.5/en/…
  • 该文档对您有帮助吗! @nicoschuck
  • 很抱歉回答迟了。我很快就回家了,我会试试的。您更喜欢 buld insert 还是 prefare 更好?你的经验是什么?@anandtripathi
  • 我不知道后面的部分,但我更喜欢 bulk-insert 并且有一个问题是 bulk-insert 无法处理的是它不返回记录的 id 列表,它只返回第一个 insert_id。跨度>
  • 哇从超过 3 小时到 201 秒。棒极了。非常感谢

标签: python mysql sql-insert


【解决方案1】:

为什么不使用bulk-insert 而不是一次又一次地插入查询。这是它的链接bulk-insert

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2013-05-22
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多