Не удается открыть базу данных «‘имя’: ‘мастер'», запрошенную при входе в систему. Ошибка входа в систему

#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, поэтому, возможно, неправильно понял