Python 将多个csv文件插入现有mysql表时出错

Python 将多个csv文件插入现有mysql表时出错,python,pandas,Python,Pandas,我正在尝试使用以下代码,使用sqlalchemy将多个csv文件插入名为“Trainstat”的现有mysql表中: import os, sys import pandas as pd from sqlalchemy import create_engine engine = create_engine('mysql+mysqldb://si:j9@localhost/db') path= "/home/sh/T/f/" dirs = os.listdir( path ) for file

我正在尝试使用以下代码,使用sqlalchemy将多个csv文件插入名为“Trainstat”的现有mysql表中:

import os, sys
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqldb://si:j9@localhost/db')
path= "/home/sh/T/f/"
dirs = os.listdir( path )
for file in dirs:
    df = pd.read_csv(path+file,sep='\n')
    df.to_sql('Trainstat', con=engine,dtype=None)
    print(df)
然而,我似乎得到了一个错误
ValueError:表'Trainstat'已经存在了
,当我打开我的表时,它只插入了一行。我输入代码时可能出现的错误是什么?除了sqlalchemy之外,还有其他方法可以将csv文件插入到已经存在的表中吗?

该方法有一个
(如果存在)参数:

如果存在:{'fail','replace','append'},默认为'fail'

如果表已存在,如何操作

  • 失败:引发ValueError
  • 替换:在插入新值之前删除表
  • 追加:向现有表插入新值
还请注意,它说:

引发:ValueError

当表已经存在并且如果存在,则默认为“失败”

由于您没有通过任何测试,因此会得到默认值,
fail
。因此,在为第一个
DataFrame
创建表之后,每个后续的
DataFrame
都会引发一个
ValueError
,就像文档所说的那样。而
ValueError
会准确地告诉您出了什么问题:
表'Trainstat'已经存在


由于您希望追加到表中而不是失败,只需将
if_exists='append'
添加到您的调用中。

这是因为to_sql方法中表存在的默认参数是失败。下面对代码的更改应该可以解决您的问题

import os, sys
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqldb://si:j9@localhost/db')
path= "/home/sh/T/f/"
dirs = os.listdir( path )
for file in dirs:
    df = pd.read_csv(path+file,sep='\n')
    df.to_sql('Trainstat', con=engine,dtype=None,if_exists='append')
    print(df)

我得到了错误
sqlalchemy.exc.OperationalError:(_mysql\u exceptions.OperationalError)(1054,“字段列表”中的未知列“index”)
,即使列索引不存在且文件未插入