2015-02-17 69 views
2

更新:我已確認這只是使用Azure SQL實例時的一個問題。我可以使用相同的連接字符串連接到本地,網絡和遠程SQL(AWS)實例 - 連接到Azure時只會失敗。我可以使用其他工具(如Management Studio)連接到Azure實例。使用pymssql的Python/Flask/sqlAlchemy環境中的Adaptive Server連接失敗錯誤

我正在構建一個小型Python(3.4.x)/ Flask應用程序。我在這裏是一個完整的noob,所以如果我在發佈中違反任何規則,請原諒我。

我已經創建了數據庫引擎:

from sqlalchemy import create_engine 
from sqlalchemy.orm import scoped_session, sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 

engine = create_engine('mssql+pymssql://dbadmin:[email protected]/databasename?charset=utf8') 
db_session = scoped_session(sessionmaker(autocommit = False, autoflush = False, bind = engine)) 

Base = declarative_base() 
Base.query = db_session.query_property() 

def init_db(): 
    import models 
    Base.metadata.creat_all(bind=engine) 

一切都建立/在運行時能夠正確地解釋,但我得到上運行的查詢時出現錯誤:

usr = User.query.filter_by(username=form.user.data).first() 

的錯誤是:

sqlalchemy.exc.OperationalError: (OperationalError) (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n') None None 

包包括:Flask == 0.10.1,pymssql == 2.1.1,SQLAlchemy == 0.9.8

在此先感謝。

+0

你對這個錯誤信息做了一些研究嗎?如果是這樣 - 爲什麼結果不令人滿意(所以我們不重複你的努力)? – 2015-02-17 22:38:06

+0

是的,謝謝。我發現的一切似乎都圍繞着freeTDS版本問題,但是,我不確定它的相關性(除了它提供了相同的錯誤信息)。我的理解是,freeTDS是一套用於* nix盒子的庫,允許他們說MS SQL服務器。我正在開發,測試並將應用程序部署到基於Windows的環境。 – BoredTech 2015-02-17 22:45:20

+0

你有你的C:\ freetds.conf文件。看到http://pymssql.org/en/latest/freetds.html – darwindave 2015-02-18 04:57:15

回答

0

我有類似的問題,並通過明確設置tds version = 7.0來解決它。在使用系統範圍sysconfdir/freetds.conf之前,FreeTDS讀取用戶的${HOME}/.freetds.conf

[global] 
tds version = 7.0 

你可以找到freetds.con信息:所以,我[global]部分爲創建~/.freetds.confhttp://www.freetds.org/userguide/freetdsconf.htm

0

正如我剛剛有同樣的問題。

既然我能得到pymssql連接繞過sqlalchemy,我想一切要細,所以我用了create_engine參數connect_args一切通過直pymssql.connect

server_name = "sql_server_name" 
server_addres = server_name + ".database.windows.net" 
database = "database_name" 
username = "{}@{}".format("my_username", server_name) 
password = "strong_password" 

arguments = dict(server=server_addres, user=username, 
           password=password, database=database, charset="utf8") 

AZURE_ENGINE = create_engine('mssql+pymssql:///', connect_args=arguments) 

這工作正常,並不需要一個干擾.freetds.conf文件。

此外,請注意pymssql要求usernname的格式爲[email protected]。有關更多信息,請參閱鏈接的文檔。

相關問題