【发布时间】: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