通过 dsn 错误的 ODBC 连接
ODBC connection through dsn error
我在尝试通过 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')
Error: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 11 for SQL
Server][SQL Server]Login failed for user 'User'. (18456)
(SQLDriverConnect)")
我想在 odbc.ini 中隐藏密码,这样当我调用 pyodbc.connect
时它就不会出现
行 conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password')
似乎使用了 my_dsn
、User
和 Password
的文字字符串值。您可以尝试使用关键字 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()])
我遇到了同样的问题。
https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows#using-a-dsn
您可以使用可信连接连接到您的 SQL 服务器实例,即使用 Windows 帐户而不是登录名和密码,通过使用 Trusted_Connection 属性
conn = pyodbc.connect('DSN=mynewdsn;Trusted_Connection=yes;')
我在尝试通过 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')
Error: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'User'. (18456) (SQLDriverConnect)")
我想在 odbc.ini 中隐藏密码,这样当我调用 pyodbc.connect
时它就不会出现行 conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password')
似乎使用了 my_dsn
、User
和 Password
的文字字符串值。您可以尝试使用关键字 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()])
我遇到了同样的问题。
https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows#using-a-dsn
您可以使用可信连接连接到您的 SQL 服务器实例,即使用 Windows 帐户而不是登录名和密码,通过使用 Trusted_Connection 属性
conn = pyodbc.connect('DSN=mynewdsn;Trusted_Connection=yes;')