Python 的 Tsql KeyError 消息

Tsql KeyError Message with Python

以下 Python 代码工作正常:

import pyodbc

conn_str = (
    r'DRIVER={SQL Server};'
    r"SERVER=db.analytics.com;"
    r'DATABASE=Reporting;'
    r'UID=user;'
    r'PWD=password;'
)

cnxn = pyodbc.connect(conn_str)
curs = cnxn.cursor()

但是当我尝试这样做时:

abc="db.analytics.com"

conn_str = (
    r'DRIVER={SQL Server};'
    r"SERVER={};".format(abc),
    r'DATABASE=Reporting;'
    r'UID=user;'
    r'PWD=password;'
)

cnxn = pyodbc.connect(conn_str)
curs = cnxn.cursor()

我收到如下错误:

KeyError: 'SQL Server'

你能帮我解决这个问题吗?

我尝试使用以下代码分配 abc 值并且它工作正常。

conn_str = (
    r'DRIVER={SQL Server};'
    r"SERVER="+abc+";",
    r'DATABASE=Reporting;'
    r'UID=user;'
    r'PWD=password;'
)

希望以上解决方案能解决您的问题。

您已使用 string literal concatenation。 所以当你这样做时:

r'DRIVER={SQL Server};'
r"SERVER={};".format(abc)

实际上是:

r'DRIVER={SQL Server};SERVER={};'.format(abc)

因此,format() 正在尝试查找并替换关键字参数 SQL Server。 这就是您收到错误 KeyError: 'SQL Server'.

的原因

要避免这种行为,您可以像这样用 + 连接字符串:

conn_str = (
    r'DRIVER={SQL Server};' +
    r"SERVER={};".format(abc),
    r'DATABASE=Reporting;'
    r'UID=user;'
    r'PWD=password;'
)

或者更好的是,通过加倍来避开大括号:

conn_str = (
    r'DRIVER={{SQL Server}};'
    r"SERVER={};".format(abc),
    r'DATABASE=Reporting;'
    r'UID=user;'
    r'PWD=password;'
)