Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和MySQL—为什么SQLite在向数据库写入数据帧时速度要快得多_Python_Mysql_Sqlite - Fatal编程技术网

Python和MySQL—为什么SQLite在向数据库写入数据帧时速度要快得多

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

我正在开发一个网站,用户可以将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_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(最适合数据分析)。