使用Python的Tsql KeyError消息

以下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”

您能帮我吗?

okletsgo 回答:使用Python的Tsql KeyError消息

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

async/await

我希望上述解决方案能够解决您的问题。

,

您已使用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;'
)
本文链接:https://www.f2er.com/3073083.html

大家都在问