Member 13264296 Ответов: 1

Импортируйте все файлы xlsx из папки в базу данных с помощью python.


Как обработать несколько файлов excel из папки и загрузить в базу данных с помощью python.

Что я уже пробовал:

  all_data = pd.DataFrame()

  for f in glob.glob("*.xlsx"):
     df = pd.read_excel(f)
     all_data = all_data.append(df,ignore_index=True)

# now save the data frame
  writer = pd.ExcelWriter('data.xlsx')
  all_data.to_excel(writer,'Sheet1',index = False)
  writer.save()

  data = pd.read_excel('c:\\users\sam\desktop\data.xlsx')

 # rename columns
 data = data.rename(columns={'posteddate': 'posteddate',
                          'totalamt': 'totalamt',
                          'qty': 'qty',
                          'itemstatus': 'itemstatus',
                          'groupitem': 'groupitem',
                          'supdlno': 'supdlno',
                          'barcode': 'barcode',
                          'unitprice': 'unitprice',
                          'subtotal': 'subtotal',
                          'itemnumber': 'itemnumber'})

 # open the workbook and define the worksheet
 book = xlrd.open_workbook("c:\\users\sam\desktop\data.xlsx")
 sheet = book.sheet_by_name("sheet1")

 query1 = """
 create table [leaf] (

 posteddate varchar(255),
 totalamt varchar(255),
 qty varchar(255),
 itemstatus varchar(255),
 groupitem varchar(255),
 supdlno varchar(255),
 barcode varchar(255),
 unitprice varchar(255),
 subtotal varchar(255),
 itemnumber varchar(255)
 )"""

 query = """
 insert into [leaf] (
   posteddate,
   totalamt,
   qty,
   itemstatus,
   groupitem,
   supdlno,
   barcode,
   unitprice,
   subtotal,
   itemnumber
  ) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"""

 # execute create table
   try:
      cursor.execute(query1)
      conn.commit()
   except pypyodbc.programmingerror:
      pass

 # grab existing row count in the database for validation later
 cursor.execute("select count(*) from leaf")
 before_import = cursor.fetchone()

 for r in range(1, sheet.nrows):
  posteddate = sheet.cell(r,1).value
  totalamt= sheet.cell(r,4).value
  qty = sheet.cell(r,8).value
  itemstatus= sheet.cell(r,12).value
  groupitem= sheet.cell(r,14).value
  supdlno= sheet.cell(r,16).value
  barcode= sheet.cell(r,17).value
  unitprice= sheet.cell(r,18).value
  subtotal= sheet.cell(r,19).value
  itemnumber= sheet.cell(r,20).value
  # assign values from each row

  values = (posteddate, totalamt, qty, itemstatus,
 groupitem, supdlno, barcode, unitprice, subtotal, itemnumber)

     # execute sql query

  cursor.execute(query, values)

     # commit the transaction
      conn.commit()

 # if you want to check if all rows are imported
 cursor.execute("select count(*) from leaf")
 result = cursor.fetchone()

 print((result[0] - before_import[0]) == len(data.index))  # should be true

 # close the database connection
 conn.close()

1 Ответов

Рейтинг:
1

#realJSOP

Если это база данных sql server, создайте для нее пакет SSIS. Это самый простой способ сделать это.


Member 13264296

Спасибо за ваш ответ, сэр. Я буду искать об этом. Может быть, вы дали какие-то рекомендации?

#realJSOP

Инструменты, которые вы используете, зависят от того, какая версия SQL-сервера вы используете. Когда вы google "ssis", включите версию ql, например "sql server 2016 ssis".

Member 13264296

SSIS не нуждается в большом количестве кода. так ведь?. Я могу попробовать использовать DataFrame и обновить свой пост после того, как решу его.

#realJSOP

Я занимаюсь SSIS уже два года, и мне пришлось написать только две задачи сценария. Я понятия не имею, что такое dataframe.

Member 13264296

Я получил его от сэра Джона Симмонса.Я использовал dataframe, чтобы объединить все файлы excel из каталога в один файл excel, и я использовал свой код выше для загрузки в базу данных sql. Теперь моя проблема заключается в том, как я могу найти другой каталог, содержащий файл xlsx.