【问题标题】:Fast Data insertion in SQL Server using python使用 python 在 SQL Server 中快速插入数据
【发布时间】:2020-02-10 16:32:47
【问题描述】:

我想将 CSV 文件中的数据插入 Azure 上托管的 SQL Server 数据库。通过将数据读入熊猫数据框并在 python 的 for 循环中使用 insert 语句,我能够在表中插入数据。我正在使用pyodbc。这种方法需要很长时间才能插入数据。我也试过pd.to_sql()。虽然后者比 for 循环方法快,但仍然很慢。

有没有更快的方法使用 python/pandas 在 SQL Server 中插入 CSV 文件?

【问题讨论】:

    标签: python sql-server pandas performance insertion


    【解决方案1】:

    使用线程,这样每个线程都可以插入到数据库中。这个人提供了一个很好的例子,他有一个很好的例子。检查此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()
    

    【讨论】:

    • 感谢@Rodrigo Loza。我会尝试这种方法
    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多