【问题标题】:Python Pandas MySQL - Why is SQLite so much faster when writing dataframes to a databasePython Pandas MySQL - 为什么将数据帧写入数据库时​​ SQLite 速度如此之快
【发布时间】:2021-07-03 21:06:40
【问题描述】:

我正在开发一个网站,用户可以在其中将 csv 文件直接导入数据库,并开发一个前端,一旦数据被归档到数据库中,它就会对数据执行一些数据分析。我正在使用 pandas 将 csv 转换为数据框,然后将该数据框导入 MySQL 数据库:

导入 MySQL 数据库:

engine = create_engine('mysql+mysqlconnector://[username]:[password]@[host]:[port]/[schema]', echo=False)
df = pd.read_csv('C:/Users/[user]/Documents/Sales_Records.csv')
df.to_sql(con= engine, name='data', if_exists='replace')

这样做的问题是,对于我使用的数据集(500 万行),性能太慢并且操作超时而没有导入数据。但是,如果我尝试除使用 SQLite3 之外的相同操作:

导入到 SQLite3 数据库:

conn = sqlite3.connect('customer.db')
df = pd.read_csv('C:/Users/[user]/Documents/Sales_Records.csv')
df.to_sql('Sales', conn, if_exists='append', index=False)
mycursor = conn.cursor()
query = 'SELECT * FROM Sales LIMIT 10'
print(mycursor.execute(query).fetchall())

此代码块在几秒钟内执行并导入数据集的所有 500 万行。所以我该怎么做?我预计不会有多个人同时传递大型数据集,所以我认为仅仅为了 SQLite 在此应用程序中提供的明显性能优势而放弃 MySQL 不会有什么坏处。只是感觉好像有更好的方法......

【问题讨论】:

  • 尝试 MySQL 的 LOAD DATA 方法并放弃 pandas(最适合数据分析)。

标签: python mysql sqlite


【解决方案1】:

MySQL 通过网络连接将数据发送到磁盘。

SQLite3 直接通过磁盘发送数据。

https://gist.github.com/jboner/2841832

你没有提到 MySQL 服务器在哪里。但即使它在您的本地机器上,它也会通过 TCP/IP 堆栈,而 SQLite 只会直接写入磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2016-10-06
    • 2016-02-22
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多