#python #excel #pandas #slice
#python #excel #pandas #срез
Вопрос:
Я пытаюсь вставить данные из файла Excel, который содержит несколько листов, при этом для каждого имени листа в базе данных существует соответствующая таблица. Теперь я подумал, что подход заключается в том, чтобы выполнить цикл по имени листа и создать рекурсивный SQL в цикле, который подходит для всех имен листов. Теперь в цикле предположим, что сначала появляется имя листа, затем выполняется несколько проверок, которые проверяют, существует ли таблица в базе данных или нет, и проверяют имя столбца на листе, а также имя столбца из базы данных. если все в порядке, то данные листа будут вставлены в базу данных.
Проблемы, с которыми я сталкиваюсь::
1 — Получить имя листа из pandas
xls = pd.ExcelFile<filepath>
Sheet_name = x.sheet_names
I am not able to loop through it although it contains all the sheet name but for() is not working.
Help me with a iteration code.
2 — Помогите мне вырезать имя столбца из строки заголовка каждого листа, чтобы подтвердить имя столбца.
I am placing a few piece of code that i have been working on, help me with syntax error's as well
Their are errors in SQL code as well Please help me with them also
Код:
import pandas as pd
Import the oracle lib
Create -----> DB_Connection
mycursor = DB_Connection.cursor()
xls = pd.ExcelFile('File Path')
SheetNames = xls.sheet_names
for i in SheetNames:
SelectSql = "SELECT TABLE_NAME FROM all_tab_columns where OWNER = 'XYZZZ' and TABLE_NAME = '"i"' "
mycursor.execute(SelectSql)
QueryResult = mycursor.fethcone()
if(pd.isnull(QueryResult)):
Print("Table doesn't exist in database")
else:
""" Add the Data frame slicing code to get Column name's to Check if same Exist in Database or Not """
GetColumnSql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"i"' ORDER BY ORDINAL_POSITION"
mycursor.execute(GetColumnSql)
ColumnName = mycursor.fetchall()
InsertSql = "INSERT INTO '"i"'('"ColumnName"') VALUES(%s,%s,%s,%s,%s)"
VAL0 = """ insert from dataframe """
mycursor.execute(InsertSql,VAL0)
DB_Connection.commit();
Ответ №1:
Относительно 1)
sheet_name
Параметр read_excel
функции может быть None
. При этом возвращаемым значением будет не фрейм данных pandas, а словарь. Его ключами будут имена листов и значения самих фреймов данных.
Затем вы можете выполнить итерацию по этому словарю и выполнить проверку.