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;'
)
以下 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;'
)