如果SQL查询不带任何d,则退出python中的循环

2024-10-03 23:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,有一项任务是从不同的数据库(mssql和Teradata)下载数据。我的代码背后的逻辑如下: 1:代码从excel文件中提取供应商的数据。 他说:从这个列表中,它遍历所有的供应商,并给出一个文档列表。 3:然后我使用步骤2中下载的列表从teradata下载数据并附加到最终的数据集中。你知道吗

我的问题是,如果第二步中的数据是空的,那么while循环将是无限的。有什么方法可以退出一个仍然执行其余的迭代?你知道吗

import pyodbc 
import pandas as pd


VendNum = pd.ExcelFile(r"C:\desktop\VendorNumber.xlsx").parse('Sheet3', 
          dtype=str)
VendNum['Vend_Num'] = VendNum['Vend_Num'].astype(str).str.pad(10, 
         side='left', fillchar='0')

fDataSet = pd.DataFrame()
MSSQLconn=pyodbc.connect(r'Driver={SQL Server Native Client 
     11.0};Server=Servername;Database=DBName;Trusted_Connection=yes;')
 TDconn =  pyodbc.connect
 (r"DSN=Teradata;DBCNAME=DBname;UID=User;PWD=password;",autocommit =True)    


for index, row in VendNum.iterrows():
    DocNum = pd.DataFrame()
    if index > len(VendNum["Vend_Num"]):
        break
    while DocNum.size == 0:
            print("Read SQL " + row["Vend_Num"])
            DocNum = pd.read_sql_query("select  Col1 from Table11 where 
   Col2 = " + "'" + row["Vend_Num"] + "'" + " and Col3 = 
      'ABC'",MSSQLconn)
            print("Execute SQL " + row["Vend_Num"])
  if DocNum.size > 0:    
        print(row["Vend_Num"])
        dataList = ""
        dfToList = DocNum['Col1'].tolist()
        for i in dfToList:
            dataList += "'"+i+ "'" + ","
        dataList=dataList[0:-1]

        DataSet= pd.read_sql("
         Some SQl statement which works fine "),TDconn)
        fDataSet = fDataSet.append(DataSet)               


MSSQLconn.close()
TDconn.close() 

预期的输出是在每次代码迭代时附加fDataset,但当存在空白数据帧(命名为DataSet)时,while循环不会退出。你知道吗


Tags: 数据代码列表numrowpdpyodbcwhile
2条回答

当您使用系统资源时,您应该使用

with open(...):

Chris所述

A while loop is supposed to be infinite, until a condition is met. Perhaps create a for loop instead, which makes a few attempts then passes.

我把时间改成了IF,效果很好。你知道吗

相关问题 更多 >