【问题标题】:Python/MySQL - import csv data into mysql tablePython/MySQL - 将 csv 数据导入 mysql 表
【发布时间】:2020-05-06 11:48:31
【问题描述】:

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

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

基本上适用于 csv 文件中的所有行。 文件里面的数据如下:

我可以将同样的方式直接导入 Workbench,但我想通过应用程序来完成。

按照下面的代码:

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


    【解决方案1】:

    您的 CSV 包含 5 个字段。

    指令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 ',';
    

    【讨论】:

      【解决方案2】:

      您的表定义以自动递增列开始,但您的输入数据显示所有这些列为零。因此,不要导入它们。

      您的输入数据行以逗号分隔符结尾。在 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 列告诉导入将这些值放入虚拟对象而不是表中:换句话说,跳过它们。

      【讨论】:

      • 但您的输入数据对所有这些列显示为零。 NULL 或零会导致 AI 新值生成,除非启用了 NO_AUTO_VALUE_ON_ZERO SQL 模式。所以零可能足够合法......但是,跳过它会使查询独立于 SQL_Mode,因此很有用。
      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多