如何使用熊猫将csv加载到MySQL中?

时间:2020-07-09 14:02:51

标签: python mysql pandas

很抱歉,这可能是一个简单的问题。我已经与熊猫合作了一段时间,并且没有将Excel文件加载到MSSQL的麻烦,但是,我无法为mysql弄清楚。我无法下载MySQLdb软件包,因此我安装了mysql软件包并使用了mysql.connector,如下所示:

原始代码

import pandas as pd
import mysql.connector as mysql

data = pd.read_excel(r"[my file path]")
df = pd.DataFrame(data, columns=['Name', 'country', 'age', 'gender'])


conn = mysql.connect('Driver={SQL Server};'
                   'Server=[my server name];'
                   'Database=[my database];'
                   'Trusted_Connection=yes;')

cursor = conn.cursor()

print(df)


for row in df.itertuples():
    cursor.execute('''
                INSERT INTO [database].dbo.[table] (Name, country, age, gender)
                VALUES (?,?,?,?)
                ''',
                   row.Name,
                   row.country,
                   row.age,
                   row.gender
                   )
conn.commit()

不确定要执行所有操作该怎么做。

有效的代码

import mysql.connector
import pandas as pd

conn= mysql.connector.connect(user='[username]', password='[password]', host='[hostname]', database='[databasename]')
cursor = conn.cursor()
excel_data = pd.read_excel(r'[filepath]',sep=',', quotechar='\'')

for row in excel_data.iterrows():
    testlist = row[1].values
    cursor.execute("INSERT INTO [tablename](Name, Country, Age, Gender)"
                   " VALUES('%s','%s','%s','%s')" % tuple(testlist))

conn.commit()
cursor.close()
conn.close()

更简洁的代码也有效

import pandas as pd
from sqlalchemy import create_engine, types

engine = create_engine('mysql://root:[password]@localhost/[database]') # enter your password and database names here

df = pd.read_excel(r"[file path]",sep=',',quotechar='\'',encoding='utf8') # Replace Excel_file_name with your excel sheet name
df.to_sql('[table name]',con=engine,index=False,if_exists='append') # Replace Table_name with your sql table name

2 个答案:

答案 0 :(得分:1)

Pandas具有用于处理SQL数据库的number of great functions。一旦您从excel阅读,创建了df并连接到数据库,就可以使用:

df.to_sql("table_name", conn, if_exists='replace', index=False)

,数据库表的列将自动创建。当然,您可以访问上面的链接并使用其他参数。另外,请记住使用conn.close()关闭数据库连接。

编辑:想通了,我还将添加如何简单地从数据库中读取数据框。

df = pd.read_sql("SELECT * FROM table_name", conn)

希望这会有所帮助!

答案 1 :(得分:0)

除了使用已经提到的数据框外,我还想添加一点。我不确定是否可以安装mysql workbench。如果是这样,它为您提供了一种将csv文件导入到mysql数据库中的简便方法。希望这也有帮助!