更新:我已经确认这只是使用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
提前致谢。
答案 0 :(得分:0)
我有类似的问题并通过明确设置tds version = 7.0
来解决它。在使用系统范围${HOME}/.freetds.conf
之前,FreeTDS会读取用户的sysconfdir/freetds.conf
。因此,我使用~/.freetds.conf
部分创建了[global]
:
[global]
tds version = 7.0
您可以在freetds.con
:http://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
格式。有关更多信息,请参阅链接文档。