我正在尝试使用sqlalchemy将多个csv文件插入到已经存在的名为' Trainstat'使用以下代码:
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: Table 'Trainstat' already exists
,当我打开我的表时,它只插入了一行。我的代码可能出现什么错误?除了sqlalchemy之外还有其他方法可以将csv文件插入到现有的表中吗?
答案 0 :(得分:2)
to_sql
方法有一个if_exists
参数:
if_exists : {'fail','replace','append'},默认'失败'
如果表已经存在,如何表现。
- 失败:提出ValueError。
- replace:在插入新值之前删除表。
- 追加:将新值插入现有表格。
另请注意:
提升: ValueError
当表已存在且if_exists为'fail'(默认值)时。
由于您没有通过任何内容,因此您获得默认值fail
。因此,在为第一个DataFrame
创建表后,每个后续DataFrame
都会引发ValueError
,就像文档说的那样。 ValueError
告诉您确切的错误:Table 'Trainstat' already exists
。
由于您希望附加到表格而不是失败,只需在通话中添加if_exists='append'
即可。
答案 1 :(得分:0)
这是因为, 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)