我想将数据从CSV文件插入到Azure托管的SQL Server数据库中。通过将数据读入pandas数据框并在python的for循环中使用insert语句,我能够在表中插入数据。我正在使用pyodbc
。这种方法花费了很长时间才能插入数据。我也尝试过pd.to_sql()
。尽管后者比for循环方法快,但仍然很慢。
是否有使用python / pandas在SQL Server中插入CSV文件的更快方法?
答案 0 :(得分:0)
使用线程,以便每个线程都可以插入数据库。这个有很好榜样的家伙提供了一个很好的例子。选中此link。
看看代码的这一部分,他在那里启动指向插入函数的线程。
def rnd_user(num=1000001, threadid=1):
query = u"INSERT INTO imdb.employees (fname, lname, hired, job_code, store_id) VALUES ('%(fname)s','%(lname)s','%(hired)s','%(jobcode)s','%(storeid)s');"
cnx = mysql.connector.connect(**dbconfig)
cnx.autocommit = True
cursor = cnx.cursor()
def rnd_date():
return time.strftime("%Y-%m-%d", (random.randrange(2000,2016), random.randrange(1,12), random.randrange(1,28), 0, 0, 0, 0, 1, -1))
for x in range(num):
if not shutdown_event.is_set():
fname = genstring(3, 9)
lname = genstring(4, 12)
hired = rnd_date()
jobcode = genstring(3, 3).upper()
storeid = random.randrange(1, 20)
cursor.execute(query % {u'fname': fname, u'lname': lname, u'hired': hired, u'jobcode': jobcode, u'storeid': storeid})
if x % 1000 == 0:
print "[%2d] Inserted %d rows" % (threadid, x)
cnx.close()
... (more code) ...
for x in range(8):
t = threading.Thread(target=rnd_user, args=(125000,threadId,))
t.start()