Как удалить чистый лист, если запрос MSSQL пуст? - PullRequest
1 голос
/ 07 марта 2019
#create excel doc
writer = pd.ExcelWriter('SeriesofSheets.xlsx')

#sql query
cursor = cnxn.cursor()
script = """
select *
from TblCustomersA with (nolock)
"""
#run query
cursor.execute(script)

#write query to sheet
df = pd.read_sql_query(script, cnxn)
df.to_excel(writer, sheet_name='Customers A')

#sql 2nd query
cursor = cnxn.cursor()
script = """
select *
from TblCustomersB with (nolock)
"""
#run query
cursor.execute(script)

#write query to sheet
df = pd.read_sql_query(script, cnxn)
df.to_excel(writer, sheet_name='Customers B')

#Save the excel document
writer.save()

Весь этот код + мое собственно соединение SQL прекрасно работает для создания документа Excel и последующих листов.

Что я хотел бы сделать - это бросить оператор If / then, который будет искать в строке 2 данные. Если он отсутствует, удалить лист.

Я пробовал что-то вроде этого:

active_sheet = df.get_sheet_by_name("Customers B")

if active_sheet['A2'].isnull():
    df.remove_sheet(active_sheet)
else:
    Continue

Однако я получил ошибку типа данных. Как проверить, что мой запрос не дал результатов, а затем пропустить этот лист?

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете просто проверить длину вашего кадра данных.Если это> 0, то пишите в файл.Кроме того, вам не нужно использовать cusrsor.execute(q), если вы собираетесь использовать pd.read_sql_query.Pandas позаботится о выполнении вашего запроса.

Вы также можете улучшить свой код, просматривая список имен таблиц и выполняя ваш запрос в цикле.Ваше имя таблицы в вашем запросе будет просто использовать f-string для передачи правильного значения имени таблицы - обратите внимание, что для f-строки требуется python 3.6+.

Я протестировал его на своем конце, используя базу данных Oracle, и он дал ожидаемые результаты.Дайте мне знать, если у вас есть проблемы с MSSql.

#create excel doc
writer = pd.ExcelWriter('SeriesofSheets.xlsx')

tables = ['TblCustomersA', 'TblCustomersA']
customers = ['Customer A', 'Customer B']


#iterate through your tables and write them to the excel doc
for i in range(len(tables)):
    #sql query
    q = f"""
    select *
    from {tables[i]} with (nolock)
    """

    #write query to sheet
    df = pd.read_sql_query(q, cnxn)

    if len(df) > 0:
        #assign the specific sheet's name by using our customer list
        df.to_excel(writer, sheet_name=f'{customers[i]}')
        writer.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...