【问题标题】:How do I load a csv into MySQL using pandas? [duplicate]如何使用 pandas 将 csv 加载到 MySQL 中? [复制]
【发布时间】:2020-10-30 03:42:08
【问题描述】:

抱歉,这可能是一个简单的问题。我一直在使用 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

【问题讨论】:

  • 您好,您能详细解释一下您目前的问题是什么吗?您已经清楚地解释了您所做的事情,但是从您所写的内容中不清楚症状是什么,您的代码试图实现什么,或者您到底不清楚什么?
  • 我正在尝试使用 pandas 将 excel 文件加载到 mysql 数据库中,上面的代码适用于 MSSQL(减去 import mysql;我使用 import pyodbc)但是我不知道如何使它适用于mysql。在这方面寻求帮助。我是否设置了错误的连接?语法错了吗?感谢您的回复!

标签: python mysql pandas


【解决方案1】:

Pandas 有一个number of great functions 用于处理 SQL 数据库。从 excel 中读取数据、创建 df 并连接到数据库后,您可以简单地使用:

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

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

编辑:我想添加如何简单地从数据库中读取数据帧。

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

希望这会有所帮助!

【讨论】:

  • 此外,您可以将sqlalchemy.create_engine 中的engine 对象传递给con 参数,而不必大惊小怪地打开/关闭连接。
  • 您好,感谢您的回复!这是否适用于 MySQL 和 MSSQL?当我尝试 df.to_sql 语句(用于 mssql)时,出现以下错误:pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': (' 42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称'sqlite_master'。(208) (SQLExecDirectW); [42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。(8180)“)我删除了我的插入语句并为此尝试了您的行
  • @gg255 它也应该适用于 MySQL。我不确定 MSSQL,但这适用于 SQLite 数据库。如果您想检查一下,有一个讨论 here 关于如何配置它以与 MySQL 数据库一起使用。如果 pd.to_sql() 不起作用,我会尝试 sql.write_frame() 并将风格更改为“mssql”,但我不能说这是否有效,因为我从未处理过 MSSQL 数据库。
【解决方案2】:

除了使用已经提到的数据框之外,我还想补充一点。我不完全确定你是否可以安装 mysql 工作台。如果是这样,它为您提供了一种将 csv 文件导入 mysql 数据库的简单方法。希望这也有帮助!

【讨论】:

  • 建议:也许包括一个指向 OP 可以下载安装程序的页面的链接。还有很好的建议。
  • 谢谢!这里是。 dev.mysql.com/downloads/workbench
  • 我实际上确实有工作台,我知道如何使用它将 csv 文件导入 mysql....但是我正在尝试学习如何使用 python/pandas 来做到这一点,而不是工作台本身!谢谢。
  • 哦,我明白了。感谢您的评论!
猜你喜欢
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
相关资源
最近更新 更多