通过DSN错误ODBC连接

问题描述 投票:0回答:2

我有一个问题,试图通过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))

当我打电话给我的DSN变量从我的odbc.ini,这是行不通的

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

错误:( '28000'。 “[28000] [unixODBC数据] [微软] [ODBC SQL Server的驱动程序11] [SQL服务器]用户登录失败 '用户'(18456)(的SQLDriverConnect)。”)

我想隐藏在我ODBC.INI密码,所以当我打电话pyodbc.connect它不会出现

python sql odbc pyodbc
2个回答
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()])

0
投票

我遇到过同样的问题。

https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows#using-a-dsn

您可以使用受信任的连接,即使用您的Windows帐户,而不是一个登录名和密码连接到您的SQL Server实例,通过使用Trusted_Connection属性

conn = pyodbc.connect('DSN=mynewdsn;Trusted_Connection=yes;')
© www.soinside.com 2019 - 2024. All rights reserved.