使用Flask-SQLAlchemy连接含斜杠的MSSQL服务器报错求助
解决MSSQL实例名含斜杠导致的SQLAlchemy连接失败问题
问题根源
核心问题是服务器名称中的斜杠(/)属于URI的保留分隔符,手动拼接URI时,程序会把DESKTOP-XXXXX/TEST2里的/当成服务器与数据库的分隔符,导致仅识别DESKTOP-XXXXX作为服务器名,忽略了实例名TEST2。
两种有效解决方法
方法1:手动URL编码斜杠
把服务器名称中的/替换为URL编码值%2F,让URI解析器正确识别完整的服务器+实例名:
server = r'DESKTOP-XXXXX/TEST2' user = r'DESKTOP-XXXXXYYYYYY' password = r'something' db = r'flask_test' app = Flask(__name__) # 编码服务器名中的斜杠 encoded_server = server.replace('/', '%2F') # 用f-string拼接更简洁 app.config['SQLALCHEMY_DATABASE_URI'] = f"mssql+pymssql://{user}:{password}@{encoded_server}/{db}"
方法2:使用SQLAlchemy URL构造器(推荐)
SQLAlchemy的URL.create()方法会自动处理特殊字符编码,彻底避免手动拼接的失误:
from sqlalchemy.engine import URL from flask import Flask server = r'DESKTOP-XXXXX/TEST2' user = r'DESKTOP-XXXXXYYYYYY' password = r'something' db = r'flask_test' app = Flask(__name__) # 自动处理特殊字符编码 db_url = URL.create( drivername='mssql+pymssql', username=user, password=password, host=server, database=db ) app.config['SQLALCHEMY_DATABASE_URI'] = str(db_url)
额外提示
MSSQL实例名通常用反斜杠(\)分隔主机与实例(比如DESKTOP-XXXXX\TEST2),如果改用这种格式,原始字符串(r'')可直接保留反斜杠,但仍建议用URL构造器处理,规避潜在转义问题。
内容的提问来源于stack exchange,提问作者Ayaan
相关产品推荐
相关产品推荐

