I'm trying to refactor some code and have come up with this
def get_inpatients():
    """
    Getting all the inpatients currently sitting in A&E
    """
    cnxn = pyodbc.connect(f'DRIVER={DB_DRIVER};SERVER={DB_SERVER};DATABASE={DB_NAME};UID={DB_USER};PWD={DB_PASS}')
    cursor = cnxn.cursor()
    cursor.execute('EXEC spGetInpatients')
    row = cursor.fetchone()
    while row is not None:
        yield row[0]
        row = cursor.fetchone()
In the main file I then do this
for nhs_number in get_inpatients():
    .... # This then goes and grabs details from several APIs meaning 
         # it will be a few seconds for each loop
My question is whether a genertaor is a good choice here. I previously had it so that the function would return a list. Thinking about it now, would this then mean the connection is open for as long as the for loop is running in the main file in which case I am better returning a list?