Python和MySQL—为什么SQLite在向数据库写入数据帧时速度要快得多
我正在开发一个网站,用户可以将csv文件直接导入数据库,并在数据归档到数据库后对其执行一些数据分析的前端。我使用pandas将csv转换为数据帧,然后将该数据帧导入MySQL数据库:Python和MySQL—为什么SQLite在向数据库写入数据帧时速度要快得多,python,mysql,sqlite,Python,Mysql,Sqlite,我正在开发一个网站,用户可以将csv文件直接导入数据库,并在数据归档到数据库后对其执行一些数据分析的前端。我使用pandas将csv转换为数据帧,然后将该数据帧导入MySQL数据库: engine = create_engine('mysql+mysqlconnector://[username]:[password]@[host]:[port]/[schema]', echo=False) df = pd.read_csv('C:/Users/[user]/Documents/Sales_Re
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')
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())
导入到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')
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万行),性能太慢,并且在不导入数据的情况下操作超时。但是,如果我尝试使用SQLite3以外的其他方法:
导入到SQLite3数据库:
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')
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通过网络连接将数据发送到磁盘 SQLite3直接通过磁盘发送数据 看 您没有提到MySQL服务器在哪里。但是,即使它在本地计算机上,它也会通过TCP/IP堆栈,而SQLite只会直接写入磁盘。尝试MySQL的方法,放弃pandas(最适合数据分析)。