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, приложение выдает ошибку, говорящую, что этот столбец не может быть найден - это проблема, потому что столбец был создан в запросе и как я могу это исправить?