我的任务是逐行读取csv文件并将它们插入数据库。
csv文件包含大约170万行。
我使用python与sqlalchemy orm(合并函数)来做到这一点。 但它花了五个多小时。
是由python慢性能还是sqlalchemy或sqlalchemy引起的?
或者如果我使用golang来做一个明显更好的表现呢?(但我没有经验。此外,这个工作需要每个月安排)
希望你的家伙给出任何建议,谢谢!
更新:数据库 - mysql
答案 0 :(得分:2)
对于这样的任务,你不希望逐行插入数据 :)基本上,你有两种方法:
INSERT
查询(How to do a batch insert in MySQL)。LOAD DATA [LOCAL] INFILE
。如果您不需要预处理数据,只需将CSV提供给数据库(我假设它是MySQL)答案 1 :(得分:0)
按照以下三个步骤
PYTHON CODE :
import numpy as np
import pandas as pd
from mysql.connector import connect
csv_file = 'dbtable_name.csv'
df = pd.read_csv(csv_file)
table_name = csv_file.split('.')
query = "CREATE TABLE " + table_name[0] + "( \n"
for count in np.arange(df.columns.values.size):
query += df.columns.values[count]
if df.dtypes[count] == 'int64':
query += "\t\t int(11) NOT NULL"
elif df.dtypes[count] == 'object':
query += "\t\t varchar(64) NOT NULL"
elif df.dtypes[count] == 'float64':
query += "\t\t float(10,2) NOT NULL"
if count == 0:
query += " PRIMARY KEY"
if count < df.columns.values.size - 1:
query += ",\n"
query += " );"
#print(query)
database = connect(host='localhost', # your host
user='username', # username
passwd='password', # password
db='dbname') #dbname
curs = database.cursor(dictionary=True)
curs.execute(query)
# print(query)