#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
但是,我遇到了数据类型错误。如何检查我的查询是否没有结果,然后跳过该表?
答案 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()