使用pymssql在Python / Flask / sqlAlchemy环境中的Adaptive Server连接失败错误

时间:2015-02-17 22:31:09

标签: python flask sqlalchemy pymssql

更新:我已经确认这只是使用Azure SQL实例时的一个问题。我可以使用相同的conn字符串连接到本地,网络和远程SQL(AWS)实例 - 它只在连接到Azure时失败。我可以使用其他工具(如Management Studio)连接到Azure实例。

我正在构建一个小型Python(3.4.x)/ Flask应用程序。我在这里是一个完整的菜鸟,所以如果我违反任何规则,请原谅我。

我用:

创建了数据库引擎
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:dbadminpass@somedomain.server.net/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

提前致谢。

2 个答案:

答案 0 :(得分:0)

我有类似的问题并通过明确设置tds version = 7.0来解决它。在使用系统范围${HOME}/.freetds.conf之前,FreeTDS会读取用户的sysconfdir/freetds.conf。因此,我使用~/.freetds.conf部分创建了[global]

[global]
tds version = 7.0

您可以在freetds.conhttp://www.freetds.org/userguide/freetdsconf.htm

上找到更多相关信息

答案 1 :(得分:0)

因为我遇到了同样的问题。

由于我可以pymssql绕过sqlalchemy,我认为其他一切都应该没问题,所以我使用create_engine参数connect_args将所有内容直接传递给{ {1}}。

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要求usernname采用pymssql格式。有关更多信息,请参阅链接文档。