如果MSSQL查询为空白,如何删除空白表?

时间:2019-03-07 17:22:02

标签: python excel pandas

#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 :(得分:0)

您可以简单地检查数据帧的长度。如果大于0,则写入文件。另外,如果要使用pd.read_sql_query,则不需要o使用cusrsor.execute(q)。熊猫将负责执行您的查询。

您还可以通过遍历表名列表并在循环中执行查询来改善代码。查询中的表名将仅使用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()