首页 > 解决方案 > 无法打开登录请求的数据库“\'name\': \'master\'”。登录失败

问题描述

我目前遇到错误

无法打开登录请求的数据库“'name': 'master'”。登录失败

当我尝试在 Django/Python Web 应用程序中执行我的 PrintCSV 视图函数时

该功能应该读取服务器上的每个数据库并打印区域中的所有帐户。

我不确定这个问题可能与我的登录权限或我的代码本身有关。

视图.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 < 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 Driver][SQL Server]无法打开登录请求的数据库“'name': 'master'”。登录失败。(4060) (SQLDriverConnect); [42000] [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性 (0);[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法打开数据库“'name': 'master'”登录。登录失败。(4060);[42000] [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性(0)')

当我在 Microsoft SQL Studio 上设置登录时,我确保所有需要勾选的“映射”数据库都已勾选,并且我的默认数据库设置为“主”

所以我不确定这个错误是否源于我给这个登录的权限?

标签: pythonsql-serverdatabasepyodbc

解决方案


你犯了两个错误:

  • 'Database=' + str(x) + ';'应该是'Database=' + str(x["name"]) + ';'因为您需要获取特定列,而不是整行
  • 无论如何,您可能想从查询中过滤掉系统数据库
select name
from sys.databases
where database_id > 4

推荐阅读