2015-02-17 66 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]。有关更多信息,请参阅链接的文档。

相关问题