将包含列名为“name”的pandas DataFrame转储到mysql表

时间:2017-11-13 12:29:26

标签: python mysql pandas pandas-to-sql

我正在尝试使用pandas和to_sql将我的已爬网数据转储到mysql。

我正以两种方式接近 1个GT;

{# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import MySQLdb
from sqlalchemy import create_engine
import os
from pandas.io import sql
import MySQLdb

columns_list= ['persons','c_number','name']
df = pd.DataFrame()
file_name = "/home/*****/****/data.xlsx"
data = pd.read_excel(file_name)
df = df.append(data)
df.columns = columns_list
engine=create_engine('mysql+mysqldb://root:root@localhost:3306/database_name?charset=utf8&use_unicode=1', echo=False)
con = MySQLdb.connect(host="localhost",user="user_name",passwd="password",                db="database_name")
df.to_sql(con=con, name='table_name',if_exists='replace',flavor='mysql')}

这里我得到TypeError:to_sql()获得了关键字参数'name'错误的多个值

2 - ;

import numpy as np
import pandas as pd
import MySQLdb
from sqlalchemy import create_engine
import os

columns_list= ['persons','c_number','name']
df = pd.DataFrame()
file_name = "data.xlsx"
data = pd.read_excel(file_name)
df = df.append(data)
df_n = pd.DataFrame()
df = df_n.append(df_new)
df = np.array_split(df, 100)
for x in range(len(df_new)):
    print x
    engine = create_engine('mysql+mysqldb://user_name:password@localhost:3306/database_name?charset=utf8&use_unicode=1', echo=False)
    df[x].to_sql(name='table_name', con=engine, if_exists = 'append', index=False)
    engine.dispose()

这样我就可以转储数据但名称字段我在所有记录中都是Null。

有没有办法使用列名“name”转储数据

2 个答案:

答案 0 :(得分:1)

我认为你在df方法中写了to_sql之后就有拼写错误,请尝试: df.to_sql(con=con, name='table_name',if_exists='replace',flavor='mysql')

答案 1 :(得分:0)

  

我以前遇到过类似的情况而且我不知道它发生的确切原因,但这里有一些对我有用的东西。

我像你一样用read_excel读取数据帧,并用修改后的列名重写了excel文件。

 writer = pd.ExcelWriter("data_new.xlsx")
 data.to_excel(writer,'sheet1')
 writer.save()

然后我推到了数据库。我希望它也适合你。