簡體   English   中英

SQLAlchemy PyODBC MS SQL Server少DSN連接

[英]SQLAlchemy PyODBC MS SQL Server DSN-less connection

通過pyodbc使用python 2.7和MS odbc驅動程序。 我的連接字符串如下所示:

MSSQL + pyodbc:// myuser的:將mypass @ SERVERIP / INSTANCENAME司機= ODBC驅動程序+ + 11 +的+ SQL +服務器

我登錄失敗。 但是,如果在Microsoft sql服務器管理工​​作室中使用相同的憑據和“ serverip \\ instancename”,則可以連接。

使我抓狂的是幾天前,這個相同的連接字符串對我有用,但連接到同一台計算機上的另一個sql服務器實例。 因此,我試圖弄清楚的是如何對其進行故障排除。

感謝您的指導。

我剛剛經歷了這個問題,它失敗的原因是端口,每個實例都偵聽不同的端口,因此您需要指出該實例的端口。

我的代碼是:

DBserver='host.abc.nt'
DBengine='devenv'
DBport='####'
DBname='mydb'
DBDriver='ODBC Driver 13 for SQL Server'
DBuser='user'
DBpwd='pass'
DBuserpass = DBuser if len(DBuser) > 0 else ''
DBuserpass = DBuserpass + ':' + DBpwd if len(DBuser) > 0 else ''
if len(DBengine) > 0:
    DBserver = DBserver + '\\' + DBengine 

engine = sa.create_engine(f'''mssql+pyodbc://{DBuserpass}@{DBserver}:{DBport}/{DBname}?driver={DBDriver}''')

query=engine.execute('SELECT DB_NAME(), @@SERVERNAME')
query.fetchall()
[('mydb', 'host\\devenv')]

創建引擎之后,除了sqlalchemy之外就不需要其他庫了

但是,如果您想知道實例的端口,則可以使用: gordthompson / sqlserverport中的Github存儲庫

或在Windows中,使用SQL Studio(或其他任何方式)進行連接,然后選擇一些數據庫,同時在CMD中運行netstat來獲取端口:

C:\Users\pla>netstat -qfa | findstr host
 TCP    10.0.0.1:##87     host.abc.nt:4096  ESTABLISHED

在學習sqlalchemy時,我遇到了同樣的問題。 這種方法對我有用:

import urllib
params = urllib.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")

engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

這來自sqlalchemy文檔。 它似乎與登錄憑據無關,但是錯誤消息對我來說是相同的,並且可以正常工作。

參考http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#pass-through-exact-pyodbc-string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM