pymssq的Python/Flask/sqlAlchemy环境中的自适应服务器连接失败错误

2024-05-18 10:53:17 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:我已经确认这只是在使用azuresql实例时出现的问题。我可以使用相同的conn字符串连接到本地、网络和远程SQL(AWS)实例-只有在连接到Azure时才会失败。我可以使用其他工具(如managementstudio)连接到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)

所有内容在运行时都会正确生成/解释,但在运行查询时出现错误:

^{pr2}$

错误是:

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

包装是:烧瓶==0.10.1,PymSql==2.1.1,SQLAlchemy==0.9.8

提前谢谢。在


Tags: 实例fromimportfalsedbbasesqlalchemysession
2条回答

因为我也有同样的问题。在

因为我可以让^{}绕过sqlalchemy进行连接,所以我认为其他一切都应该正常,所以我使用create_engine参数^{}将所有内容直接传递给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的格式为username@servername。有关详细信息,请参阅链接的文档。在

我遇到了类似的问题,并通过显式设置tds version = 7.0来解决它。{{cd2>在系统中读取~/.freetds.conf,其中[global]部分为:

[global]
tds version = 7.0

您可以在^{上找到更多信息:http://www.freetds.org/userguide/freetdsconf.htm

相关问题 更多 >