python - python MySQL插入大数据
问题描述
使用 python,我循环通过 csv 文件读取数据,然后我在准备好的行上进行一些修改并调用保存函数将修改后的数据插入 MySQL。
def save(Id, modifiedData,):
try:
mydb = mysql.connector.connect(host="localhost",user="use",password="pass",database="data")
sql = "INSERT INTO data (Id, modifiedData) VALUES (%s, %s)"
recordTuple = (Id, modifiedData)
mycursor = mydb.cursor()
mycursor.execute(sql,recordTuple)
mydb.commit()
print("Record inserted successfully into table")
except mysql.connector.Error as error:
print("Failed to insert into MySQL table {}".format(error))
def main():
for row in csv:
#modify row
#creat Id
save(Id, modifiedData,)
但我认为这不是每次迭代进行 MYSQL 连接和插入数据的好解决方案,这将耗费时间和资源,特别是当我在生产中移动到真实服务器时如何改进我的解决方案?
解决方案
您只需要创建一次连接,并且应该在 functionmain
中,然后将连接传递给函数save
,如下所示:
def save(mydb, Id, modifiedData):
try:
sql = "INSERT INTO data (Id, modifiedData) VALUES (%s, %s)"
recordTuple = (Id, modifiedData)
mycursor = mydb.cursor()
mycursor.execute(sql,recordTuple)
mydb.commit()
print("Record inserted successfully into table")
except mysql.connector.Error as error:
print("Failed to insert into MySQL table {}".format(error))
def main():
try:
mydb = mysql.connector.connect(host="localhost",user="use",password="pass",database="data")
except mysql.connector.Error as error:
print("Failed to create connection: {}".format(error))
return
for row in csv:
#modify row
#creat Id
save(mydb, Id, modifiedData)
为了获得更好的性能,您可以尝试executemany
:
def save(mydb, modified_records):
try:
sql = "INSERT INTO data (Id, modifiedData) VALUES (%s, %s)"
mycursor = mydb.cursor()
mycursor.executemany(sql, modified_records)
mydb.commit()
print("Records inserted successfully into table")
except mysql.connector.Error as error:
print("Failed to insert into MySQL table {}".format(error))
def main():
try:
mydb = mysql.connector.connect(host="localhost",user="use",password="pass",database="data")
except mysql.connector.Error as error:
print("Failed to create connection: {}".format(error))
return
modified_records = []
for row in csv:
#modify row
#creat Id
modified_records.append([id, modifiedData])
save(mydb, modified_records)
推荐阅读
- python - 使用 cd 输入更改路径的功能
- flutter - 将模型类放入 List
- angularjs - Google Chome 扩展:无法通过 javascript 进行角度验证
- javascript - 在 map() 中使用的 async/await 中推送所有元素后,如何返回正确的数组长度?
- javascript - 更换前获取旧元素,而不是新元素
- vuejs2 - 注册时的电子邮件验证,Laravel
- javascript - 防止 Chrome 缓存 JS 文件
- javascript - 如何在浏览器上运行视频时覆盖自定义文本?
- c# - 无法将文件/图像设置为对象跟踪器的 RunTimeImageSource
- python-3.x - 在 wxpython 中单击选项卡时,如何在笔记本中加载类?