mysql - 自动将csv文件插入mysql表

标签 mysql python-3.x csv pymysql

我正在尝试将大约 2000 个 csv 文件中的每一行插入到 mysql 表中。通过以下代码,我仅从一个文件中插入一行。如何自动化代码以便为每个文件插入所有行?插入只需完成一次。

import pymysql.cursors
connection = pymysql.connect(host='localhost',
                         user='s',
                         password='n9',
                         db='si',
                         charset='utf8mb4',
                         cursorclass=pymysql.cursors.DictCursor)

try:
with connection.cursor() as cursor:
    sql = "INSERT INTO `TrainsS` (`No.`, `Name`,`Zone`,`From`,`Delay`,`ETA`,`Location`,`To`) VALUES (%s,%s,%s,%s,%s,%s,%s, %s)"
    cursor.execute(sql, ('03', 'P Exp','SF','HWH', 'none','no arr today','n/a','ND'))


connection.commit()
finally:
connection.close()

最佳答案

检查一下这段代码怎么样?

要运行此程序,您可以将所有 .csv 文件放在一个文件夹中,然后 os.walk(folder_location) 该文件夹以获取所有 .csv 文件的位置,然后我将它们一一打开并插入所需的位置这里是数据库(MySQL)。

import pandas as pd
import os
import subprocess
import warnings
warnings.simplefilter("ignore")

cwd = os.getcwd()

connection = pymysql.connect(host='localhost',
                     user='s',
                     password='n9',
                     db='si',
                     charset='utf8mb4',
                     cursorclass=pymysql.cursors.DictCursor)
files_csv = []
for subdir, dir, file in os.walk(cwd):
    files_csv += [ fi for fi in file if fi.endswith(".csv") ]

print(files_csv)

for i in range(len(files_csv)):
    with open(os.path.join(cwd, files_csv[i])) as f:
        lis=[line.split() for line in f]
        for i,x in enumerate(lis):
            #print("line{0} = {1}".format(i,x))
            #HERE x contains the row data and you can access it individualy using x[0], x[1], etc
            #USE YOUR MySQL INSERTION commands here and insert the x row here.
            with connection.cursor() as cursor:
                sql = "INSERT INTO `TrainsS` (`No.`, `Name`,`Zone`,`From`,`Delay`,`ETA`,`Location`,`To`) VALUES (%s,%s,%s,%s,%s,%s,%s, %s)"
                cursor.execute(sql, (#CONVERTED VALUES FROM x))


connection.commit()

更新 - 获取 (#CONVERTED VALUES FROM X) 的值

values = ""
for i in range(len(columns)):
    values = values + x[i] + "," # Here x[i] gives a record data in ith row. Here i'm just appending the all values to be inserted in the sql table.
values = values[:-1] # Removing the last extra comma.
command = "INSERT INTO `TrainsS` (`No.`, `Name`,`Zone`,`From`,`Delay`,`ETA`,`Location`,`To`) VALUES (" + str(values) + ")"
cursor.execute(command)
#Then commit using connection.commit()

关于mysql - 自动将csv文件插入mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50920874/

相关文章:

mysql - 在 Laravel 中使用关系创建模型

mysql - SQL中的字典表是什么?

excel - 将 ColB 和 ColC 中的数据移动到 ColA 中的数据下方

python - 如何计算递归调用次数?

python - Pandas 在读取大 (2GB) csv 时忽略标题

Python 索引错误 : list index out of range while finding SNPs in vcf

php - 将 $_POST 关联数组插入数据库 PHP

PHP登录,登录按钮刷新页面

python - 比较字典但得到结果与来源

python - 如何在函数循环之外定义参数?