Быстрая вставка данных в SQL Server с использованием Python - PullRequest
0 голосов
/ 14 октября 2019

Я хочу вставить данные из файла CSV в базу данных SQL Server, размещенную в Azure. Мне удалось вставить данные в таблицу, прочитав данные в фрейме данных pandas и используя оператор вставки в цикле for в python. Я использую pyodbc. Этот подход занял много времени для вставки данных. Я тоже попробовал pd.to_sql(). Хотя последний вариант быстрее, чем для циклического подхода, он все еще медленный.

Есть ли более быстрый способ вставить файл CSV в SQL Server с использованием python / pandas?

1 Ответ

0 голосов
/ 14 октября 2019

Используйте темы, чтобы каждый мог вставить в БД. Хороший пример дает тот парень, у которого есть отличный пример. Проверьте эту ссылку .

Взгляните на эту часть кода, где он запускает потоки, которые указывают на функцию вставки.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...