首页 > 解决方案 > 使用python将数据从.csv文件导入mysql

问题描述

我正在尝试从 .csv 文件的两列(时间 hh:mm,float)导入数据。我在mysql中创建了一个数据库和一个表。

import mysql.connector
import csv

mydb = mysql.connector.connect(host='127.0.0.1',
user= 'xxx',
passwd='xxx',
db='pv_datenbank')

cursor = mydb.cursor()
# get rid of the '' at the beginning of the .csv file
s = open('Sonneneinstrahlung.csv', mode='r', encoding='utf-8-sig').read()
open('Sonneneinstrahlung.csv', mode='w', encoding='utf-8').write(s)
print(s)

with open('Sonneneinstrahlung.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=';')
    sql = """INSERT INTO einstrahlung ('Uhrzeit', 'Einstrahlungsdaten') VALUES   (%s, %s)"""
    for row in csv_reader:
            print(row)
            print(cursor.rowcount, "was inserted.")
            cursor.executemany(sql, csv_reader)
            #cursor.execute(sql, row, multi=True)
            mydb.commit()
mydb.close()

如果我用 运行程序executemany(),结果如下:

在此之后我确实得到了错误代码:并非所有参数都被再次使用。

当我用execute()操作员尝试同样的事情时,没有显示错误,但数据没有插入到我的数据库表中。

在这里您可以看到输入数据:

输入数据

标签: pythonmysqlcsv

解决方案


executemany接受一个语句和一系列参数集。
尝试这个:

with open('Sonneneinstrahlung.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=';')
    sql = """INSERT INTO einstrahlung (Uhrzeit, Einstrahlungsdaten) VALUES (%s, %s)"""
    cursor.executemany(sql, csv_reader)
    mydb.commit()

推荐阅读