簡體   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