#python #sql-server #database #pyodbc
Вопрос:
В настоящее время я сталкиваюсь с ошибкой
Не удается открыть базу данных «имя»: «мастер», запрошенную при входе в систему. Ошибка входа в систему
когда я пытаюсь выполнить свою функцию просмотра PrintCSV в веб-приложении Django/Python
Функция должна считывать каждую базу данных на сервере и распечатывать все учетные записи, которые находятся в областях.
Я не уверен, может ли эта проблема быть связана с моими правами входа в систему или с самим моим кодом.
Views.py:
def PrintCSV(request): #Getting list of DB Names cnxn = pyodbc.connect('DRIVER={SQL Server};' 'SERVER=serverIP;' 'PORT=port;' 'UID=kyle_dev_ro;' 'PWD=password;') databaseName = 'SELECT name FROM sys.databases' cursor = cnxn.cursor(); cursor.execute(databaseName); XdatabaseNames = cursor.fetchall() cursor.close() dbNames= [] for row in XdatabaseNames: rdict = {} rdict["name"] = row[0] dbNames.append(rdict) #Starting CSV response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="Avonlea_file.csv"' writer = csv.writer(response) writer.writerow(['Unit', 'Balance' ]) for x in dbNames: connect = pyodbc.connect('DRIVER={SQL Server};' 'SERVER=192.168.1.1;' 'PORT=1433;' 'Database=' str(x) ';' 'UID=kyle_dev_ro;' 'PWD=fh$sa#8d#7F8Y3;') XaccAreas = " SELECT Account, DCBalance FROM [dbo].[Client] where iAgeingTermID = '3' AND DCBalance lt; 0 " cursor = cnxn.cursor(); cursor.execute(XaccAreas); accAreas = cursor.fetchall() cursor.close() for z in accAreas: rdict = {} rdict["Account"] = z[0] rdict["Balance"] = z[1] writer.writerow([ '', x, '', ]) writer.writerow([ rdict[0], rdict[1], ]) return response
Полная Ошибка:
(‘42000’, ‘[42000] [Microsoft][Драйвер ODBC SQL Server][SQL Server]Не удается открыть базу данных «имя»: «мастер», запрошенную при входе в систему. Ошибка входа в систему. (4060) (SQLDriverConnect); [42000] [Microsoft][Драйвер ODBC SQL Server]Недопустимый атрибут строки подключения (0); [42000] [Microsoft][Драйвер ODBC SQL Server][SQL Server]Не удается открыть базу данных «имя»: «мастер»», запрошенный при входе в систему. Ошибка входа в систему. (4060); [42000] [Microsoft][Драйвер ODBC SQL Server]Недопустимый атрибут строки подключения (0)’)
Когда я настроил вход в систему в Microsoft SQL Studio, я убедился, что все базы данных «Сопоставления», которые необходимо было отметить галочками, были отмечены галочками и что моя база данных по умолчанию была установлена в «master».
Поэтому я не уверен, что эта ошибка связана с привилегиями, которые я дал этому входу в систему?
Ответ №1:
Вы совершили две ошибки:
'Database=' str(x) ';'
должно быть'Database=' str(x["name"]) ';'
, потому что вам нужно получить определенный столбец, а не всю строку- Вероятно, вы все равно захотите отфильтровать системные базы данных из своего запроса
select name from sys.databases where database_id gt; 4
Комментарии:
1. Большое вам спасибо за ваш ответ, это имеет смысл — Однако, когда я запускаю этот код, он возвращает следующее — Ошибка ключа в /PrintCSV Значение исключения: 1
2. Извините, глядя на ваш код, я думаю, что вам нужно
x["name"]
, я пропустил тот факт, что вы копируете в хэш-таблицу, а затем в список. Я не так хорошо знаком с Python, поэтому, возможно, неправильно понял