繁体   English   中英

在连接字符串中设置没有密码的 pyodbc 连接

[英]Setup pyodbc connection without password in the connection string

我正在尝试仅使用连接字符串中的 DSN 名称来设置 pyodbc 连接(主要目标是在连接字符串中不包含密码),如下所示:

import pyodbc
cxxn = pyodbc.connect("DSN=HARSHIT_CON")

这是我的.odbc.ini文件:

[HARSHIT_CON]
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
Description=python
Database=my_db
Server=someserver,2500
user=harshitjindal
password=penguincontrolgroup
QuotedId=Yes
AnsiNPW=Yes

预期结果:因为用户名和密码是在.odbc.ini文件中定义的,所以要设置连接,但出现以下错误:

Traceback (most recent call last):
  File "hjind1/testdb.py", line 2, in <module>
    cxxn = pyodbc.connect("DSN=HARSHIT_CON")
pyodbc.InterfaceError: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed for user ''. (18456) (SQLDriverConnect)")

到目前为止我尝试了什么:

  1. 要检查是否正在读取正确的.odbc.ini文件,我尝试删除.odbc.ini文件,回溯显示未找到 DSN。 这使我相信正在读取 ini 文件。
  2. 我注意到错误提示Login failed for user ''. . 我以为没有检测到 user_id,所以我将以下行添加到 ini 文件中(希望UID代替userPWD代替password可能会有所帮助):
UID=harshitjindal
PWD=penguincontrolgroup
  1. 为了尝试解决未检测到用户的问题,我还尝试像这样在连接字符串中手动传递它: cxxn = pyodbc.connect("DSN=HARSHIT_CON;UID=harshitjindal") 这次错误消息显示用户是harshitjindal但连接失败。 如果我还在连接字符串中传递密码,如cxxn = pyodbc.connect("DSN=HARSHIT_CON;UID=harshitjindal;PWD=penguincontrolgroup") ,那么它会起作用,但整个想法是从连接字符串中删除密码它已经在 ini 文件中定义。

如何在不明确传递密码的情况下设置我的连接(从 DSN 配置中读取)?

诀窍是要意识到.odbc.ini文件需要像配置文件一样对待。 这并不直观,因为在调用pyodbc.connect()时会隐式地从 ini 文件中读取其他参数,例如DriverServerDatabase ,但需要显式读取userpassword (或UIDPWD )。

这可以按如下方式完成:

import pyodbc
from ConfigParser import ConfigParser

config = ConfigParser()
config.read("/Users/harshitjindal/.odbc.ini")   # odbc file path
DSN = "HARSHIT_CON"
cxxn = pyodbc.connect("DSN={0};UID={1};PWD={2}".format(DSN, config.get(DSN, "user"), config.get(DSN, "password")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM