Python / MySQL-将csv数据导入mysql表

问题描述 投票:0回答:2

我正在开发一个python应用程序,以通过.csv文件在我的数据库中插入数据。但是,导入文件时会出现以下错误:

Warning: (1262, 'Row 1 was truncated; it contained more data than there were input columns')
  result = self._query(query)

基本上是csv文件中的所有行。文件中的数据如下:

enter image description here

我可以将相同的方式直接导入到工作台中,但是我想通过应用程序来完成。

按照下面的代码:

from tkinter import *
import pymysql
import os
import os.path

tess = Tk()

def import_file():

    conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='omnia')
    print('connect successfull!')



    if os.path.exists('C:/temp/teste.csv'):
        statm = "LOAD DATA INFILE 'C:/temp/teste.csv' INTO TABLE testtable FIELDS TERMINATED BY ','"
        cursor = conn.cursor()
        cursor.execute(statm)

bt = Button(tess, text='browse file')
bt.place(x=10, y=10)

bt = Button(tess, text='import file', command=import_file)
bt.place(x=10, y=45)

tess.mainloop()

还有表格:

create table testTable(
    n_id int not null auto_increment,
    c_nome varchar(255),
    c_depto varchar(255),
    n_salario float,
     primary key (n_id));
python mysql csv
2个回答
1
投票

您的表定义以自动增量列开头,但是所有这些列的输入数据都显示为零。因此,请勿导入它们。

您的输入数据行以逗号分隔符结尾。在CSV世界中,这意味着每行以空列结尾。跳过它。

此SQL,未经调试,应正常工作。

 LOAD DATA INFILE 'C:/temp/teste.csv' 
 INTO TABLE testtable
      (@dummy_id,c_nome,c_depto,n_salario,@dummy) 
FIELDS TERMINATED BY ',';

[列列表中的@dummy列告诉导入将这些值放置到虚拟而不是表中:换句话说,将其跳过。


1
投票

您的CSV包含5个字段。

enter image description here

指令FIELDS TERMINATED BY ','表示下一个字段值在逗号之后开始,如果下一个字符为换行符,则表示该字段的值为空字符串''

您的表仅包含4个字段。

要么从行尾删除多余的终结逗号,要么使用虚拟的用户定义变量:

LOAD DATA INFILE 'C:/temp/teste.csv' 
INTO TABLE testtable (n_id,c_nome,c_depto,n_salario,@dummy) 
FIELDS TERMINATED BY ',';
© www.soinside.com 2019 - 2024. All rights reserved.