Выходной цикл в Python, если SQL-запрос не приносит никаких данных - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в Python, и мне было поручено загрузить данные из разных баз данных (MS SQl и Teradata).Логика моего кода такова: 1: код получает данные для продавца из файла Excel.2: Из этого списка он проходит по всем поставщикам и выдает список документов.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 к каждой итерации кода, но когда в цикле while присутствует пустой Dataframe (с именем DataSet)не выходит.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Как упомянуто Крис ,

Цикл while должен быть бесконечным, пока не будет выполнено условие. Возможно, вместо этого создайте цикл for, который делает несколько попыток, а затем проходит.

Я изменил WHILE на IF, и он работает нормально.

0 голосов
/ 08 апреля 2019

Когда вы используете системные ресурсы, вы должны использовать

with open(...):
...