Pandas将数据插入MySQL

时间:2017-07-24 19:29:05

标签: python python-2.7 pandas csv mysql-python

我正在尝试使用Pandas(Python)将从.csv文件中提取的数据列插入到MySQL中。

这是我到目前为止的代码。

import pandas as pd
from pandas.io import sql
from sqlalchemy import create_engine
engine = create_engine('mysql://username:password@localhost/dbname')
with engine.connect() as conn, conn.begin():

df = pd.read_csv('File.csv', usercols=['ID', 'START_DATE'], skiprows=skip)
print(df)

df.to_sql(con=con, name='Table1', if_exists='replace', flavor='mysql')

但是,它没有提到Table1中的特定列名。

我们如何表达?

2 个答案:

答案 0 :(得分:6)

我认为你的代码应该是这样读的

import pandas as pd
from pandas.io import sql
from sqlalchemy import create_engine

df = pd.read_csv('File.csv', usercols=['ID', 'START_DATE'], skiprows=skip)
print(df)

engine = create_engine('mysql://username:password@localhost/dbname')
with engine.connect() as conn, conn.begin():
    df.to_sql('Table1', conn, if_exists='replace')

但是,关于你的问题,除非我对Pandas的理解错误,无论列df目前有什么,这些都将被写入mysql表的同名列。

如果您需要不同的列名称,则需要重命名DataFrame中的列名称

或使用the parameters, as mentioned

  

index :布尔值,默认为True   将DataFrame索引写为列。

     

index_label :字符串或序列,默认无
  索引列的列标签。如果给出None(默认值)且index为True,则使用索引名称

答案 1 :(得分:1)

这就是我在项目中所做的

 import pandas as pd
 import sqlalchemy
 engine = sqlalchemy.create_engine('mysql+pymysql://root:@localhost/pd_test')

 ratings = pd.read_csv('ratings2.csv', sep='\t', encoding='latin-1',
                  usecols=['user_id', 'movie_id', 'user_emb_id', 
 'movie_emb_id','rating'])

 ratings.to_sql('test', con=engine, if_exists='append',index=False,chunksize=1)

希望得到帮助!