正在尝试用Python格式化连接字符串-无法替换为变量

正在尝试用Python格式化连接字符串-无法替换为变量,python,python-3.x,Python,Python 3.x,我试图用Python创建一个连接字符串——目标是有一个要访问的表/服务器列表,它将根据前面的列表进行迭代 我已经编写了查询(使用“select*from”“”工作),但似乎无法使连接字符串正常工作。对“{SQL Server}”需要放在花括号中 server_name = "myservername" #this doesn't work: con_string = ('Driver={{SQL Server}};Server={server_name};Database={mydatabas

我试图用Python创建一个连接字符串——目标是有一个要访问的表/服务器列表,它将根据前面的列表进行迭代

我已经编写了查询(使用
“select*from”“”
工作),但似乎无法使连接字符串正常工作。对“{SQL Server}”需要放在花括号中

server_name = "myservername"

#this doesn't work:
con_string = ('Driver={{SQL Server}};Server={server_name};Database={mydatabase};App=myappname;Trusted_Connection=yes')
这也不是

con_string = ('Driver={{SQL Server}};'
              'Server={};'.format(server_name)
              'Database=mydatabase;'
              'App=myappname;'  # It's not "application name"!
              'Trusted_Connection=yes')
这也不是:

serverstring = 'Server={};'.format(server_name)
con_string = ('Driver={{SQL Server}};'
              '{serverstring}'
              'Database=mydatabase;'
              'App=myappname;'  # It's not "application name"!
              'Trusted_Connection=yes')

非常感谢您的帮助。

试试看。卷曲的括号被折叠起来(如上所述)以逃避它们自己。这就是你要找的吗

Python3.6引入了新的字符串格式化功能(f-strings),它使用变量替换。但是对于我们这些仍然使用3.5的人来说,这非常有效

con_string = ('Driver={{SQL Server}};'
              'Server={svr};'
              'Database={db};'
              'App={app};'  
              'Trusted_Connection={tc}').format(svr='SERVER01', 
                                                db='MyDB', 
                                                app='MyApp',
                                                tc='Yes')
以下是输出:

Driver={SQL Server};Server=SERVER01;Database=MyDB;App=MyApp;Trusted_Connection=Yes
要创建一个函数,首先需要f。例如,你的第三个例子应该是:

serverstring = 'Server={};'.format(server_name)
con_string = ('Driver={{SQL Server}};'
              f'{serverstring}'
              'Database=mydatabase;'
              'App=myappname;'  # It's not "application name"!
              'Trusted_Connection=yes')

要创建格式字符串,您需要在开始时使用
f
(因此在第三个示例中,您应该使用
f'{serverstring}'
)。@rassar awesome!如果你想把它作为一个答案,我会把它标记为解决方案。谢谢,那看起来也行!谢谢这是一种很好的技术。请注意,f字符串仅在Python 3.6+中可用。