首页 文章

通过dsn错误的ODBC连接

提问于
浏览
0

我试图通过pyodbc.connect调用我的uid和密码时遇到问题

这是我的odbc.ini:

[my_dsn]
Driver= SQL Server
Server=my_server
User=uid_reader
Password=password_reader
MultiSubnetFailover=Yes
Database=master

当我硬编码时,它完美地工作,我可以连接

test_uid = 'uid_reader'
test_password = 'password_reader'

conn = pyodbc.connect(r'DSN=my_dsn;UID={a};PWD={b}'.format(a=test_uid,b=test_password))

当我从我的odbc.ini调用我的dsn变量时,它不起作用

conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password')

错误:('28000',“[28000] [unixODBC] [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]用户'User'登录失败 . (18456)(SQLDriverConnect)”)

我想在我的odbc.ini中隐藏密码,所以当我调用pyodbc.connect时它不会出现

1 回答

  • 0

    conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password') 行似乎使用 my_dsnUserPassword 的文字字符串值 . 您可以尝试使用关键字like the documentation here,或者执行与硬编码解决方案类似的字符串格式设置,但将其替换为加载的配置数据 .

    the documentation起,您似乎应该可以直接从ini加载DSN信息,但我自己也没有取得多大成功 . 需要注意的是,文档中只说您可以使用登录凭证,所以可能取决于驱动程序?

    无论哪种方式,下面是使用 configparser 的版本应该工作 . 对某些人来说,它可能被视为黑客攻击 .

    import pyodbc
    from configparser import ConfigParser
    
    config = ConfigParser()
    config.read(configfile)   # your odbc.ini file path and name
    dsn = config['my_dsn']
    
    #If you want to use Keywords:
    
    conn = connect(driver=dsn['driver'], server=dsn['server'], database=dsn['database'], uid=dsn['user'], pwd=dsn['password'])
    
    #If you want to use string formatting with list comprehension instead:
    conn = pyodbc.connect(''.join(['{0}={1}; '.format(k, l) for k, l in d.items()])
    

相关问题