PYODBC не выполняет циклическое выполнение sql-запросов

В настоящее время у меня есть функция представления в Django, которая необходима для вычисления 2% процентов на счетах, задолженность которых превышает 200, и вывода этого на лист excel

Однако, я столкнулся с проблемой, когда моя функция отображает только одну запись для каждой таблицы, через которую она проходит

Структура функции следующая: Проходит по базе данных, получая список имен таблиц:

def InterestCharge(request):

    # Getting list of DB Names
    cnxn = pyodbc.connect('DRIVER={SQL Server};'
                          'SERVER=;'
                          'PORT=;'
                          'UID=kyle_dev_ro;'
                          'PWD=;')

    databaseName = "SELECT name FROM sys.databases WHERE database_id > 4 AND name <> 'SageEvolution' AND name <> 'DEMO' AND name <> 'Stonearch'  AND name <> 'Caro Brooke HOA' AND name <> 'Casper' AND name <> 'Copy of Dennehof' AND name <> 'Founders View' AND name <> 'Hadedas' " \
                   "AND name <> 'Hillside' AND name <> 'Hillside Estate HOA' AND name <> 'SageCommon' AND name <> 'Villa Grove' AND name <> 'Kyle' and name <> 'Prudential House' AND name <> 'The Pearls of Fourways' "

    cursor = cnxn.cursor();
    cursor.execute(databaseName);
    XdatabaseNames = cursor.fetchall()
    cursor.close()
    dbNames = []
    for row in XdatabaseNames:
        rdict = {}
        rdict["name"] = row[0]
        dbNames.append(rdict)

Затем, он создает CSV - Проходит по списку имен вкладок и собирает количество единиц из базы данных, в которой находится в данный момент

# Starting CSV
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="Outstanding Balances.csv"'
    writer = csv.writer(response)
    writer.writerow(['Account', 'Balance', '+ 2% Balance'
                     ])

    for x in dbNames:
        connect = pyodbc.connect('DRIVER={SQL Server};'
                                 'SERVER=;'
                                 'PORT=;'
                                 'Database=' + str(x["name"]) + ';'
                                 'UID=kyle_dev_ro;'
                                 'PWD=;')

        numberOfClients = "select COUNT(*) from [" + str(x["name"]) + "].[dbo].[Client] where DCBalance is not NULL "
        cursor = cnxn.cursor();
        cursor.execute(numberOfClients);
        noc = cursor.fetchone()
        cursor.close()

Затем в цикле перебираем количество клиентов, получая сумму дебета и кредита и счет, к которому принадлежит эта сумма (Что работает при одиночном выполнении, так что это должно работать для цикла) - затем это записывается в CSV и цикл начинается снова

for z in noc:
        XaccAreas = " SELECT Account, Sum([Debit]) - SUM([Credit]) as Balance FROM [" + str( x["name"]) + "].[dbo].[PostGL] as PostGl" \
                         "Inner JOIN [" + str(x["name"]) + "].[dbo].[Client] as Client on Client.DCLink = DrCrAccount " \
                         "Where DrCrAccount = ? and AccountLink <> '104' and TxDate < '2021/11/30' Group By Account  "

        cursor = cnxn.cursor();
        cursor.execute(XaccAreas, [z]);
        accAreas = cursor.fetchall()
        for row in accAreas:
            rdict = {}
            rdict["Account"] = row[0]
            rdict["Balance"] = row[1]
            rdict["Increased-Amount"] = round((row[1] * 0.02), 2)
            writer.writerow([
                rdict["Account"],
                rdict["Balance"],
                rdict["Increased-Amount"]
            ])
        z = z+1

return response

Но по какой-то причине вместо того, чтобы возвращать что-то для каждой единицы, имеющей более 200 долгов, он возвращает только одно значение для каждой таблицы

Side Note- Когда я добавляю and Balance > 200 в запрос XaccAreas, приложение выдает ошибку, говорящую, что этот столбец не может быть найден - это проблема, потому что столбец был создан в запросе и как я могу это исправить?

Вернуться на верх