【问题标题】:Mixing strings and input variable in sql connection string using pyodbc library - Python使用pyodbc库在sql连接字符串中混合字符串和输入变量 - Python
【发布时间】:2019-07-16 13:41:38
【问题描述】:

我环顾四周,找不到这个特定问题。

所以我有一个 ext config.txt 文件,用于获取存储在 python 程序变量中的值。我在 python 中有一个变量,它以字典形式存储键:值。 (想法是它需要配置设置并从程序执行 sql server 查询)

我的代码如下所示(也显示了打印语句的输出):

driver = config['DRIVER']
server = config['SERVER']
database = config['DATABASE']
trusted = config['Trusted_Connection']

print(driver) # = {ODBC Driver 17 for SQL Server};
print(server) # = server1;
print(database) # = db1;
print(trusted) # = yes

#1. working code
sql_conn = odbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=server1; DATABASE=db1;   Trusted_Connection=yes')

#2. non working code
sql_conn = odbc.connect('\''DRIVER='+ str(driver) +  ' SERVER=' + str(server) + ' DATABASE=' + str(database)  +  ' Trusted_Connection='+ str(trusted)+'\'') 

当我尝试运行第一行时,一切都按预期运行。但是,当我尝试使用第二行时,我得到:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

这与将dict转换为字符串有关吗?或者也许用 pyodbc?

【问题讨论】:

    标签: sql-server python-3.x variables database-connection pyodbc


    【解决方案1】:

    所以我设法找到了修复程序,看起来它是解析字符串的错误:

    不正确:

    odbc.connect('\''DRIVER='+ str(driver) +  ' SERVER=' + str(server) + ' DATABASE=' + str(database)  +  ' Trusted_Connection='+ str(trusted)+'\'')
    

    正确:

    odbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';Trusted_Connection='+trusted) 
    

    【讨论】:

    • 你也可以使用 f 字符串:f'DRIVER={driver};SERVER={server}; ...'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多