如何通过SQLAlchemy连接MS SQL数据库?连接报错排查
解决SQLAlchemy连接MS SQL Server的问题
问题回顾
你已解决SQLite默认连接的问题(未配置app.config["SQLALCHEMY_DATABASE_URI"]),当前遇到ODBC驱动找不到的错误,同时伴随以下警告:
错误信息:
(pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC驱动管理器] 未找到数据源名称,并且未指定默认驱动程序 (0) (SQLDriverConnect)')警告信息:
警告:未指定驱动程序名称;使用无DSN连接时PyODBC会出现此情况
核心问题:SQLALCHEMY_DATABASE_URI格式错误
你的URI写法不符合mssql+pyodbc的规范,主要问题包括:参数分隔符错误、驱动名称空格未转义、身份验证方式的URI格式不正确。
正确的URI配置方式
根据你使用的Windows身份验证(Trusted Connection)(从你能成功运行的pyodbc信任连接代码可判断),以下是两种正确配置方式:
方式1:Windows身份验证(推荐)
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # 基础配置参数 DRIVER = "ODBC Driver 17 for SQL Server" SERVER = r"NEW-OFFICE\NEWOFFICE" # 或你的实例名:r"NEWOFFICE\MSSQLSERVER_ZVI" DATABASE = "testdb" # 关键:驱动名称空格替换为+,用&分隔查询参数 SQLALCHEMY_DATABASE_URI = f"mssql+pyodbc://@{SERVER}/{DATABASE}?driver={DRIVER.replace(' ', '+')}&Trusted_Connection=yes" app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False # 关闭不必要的跟踪警告 # 初始化SQLAlchemy db = SQLAlchemy(app) # 定义模型(必须与数据库表名严格对应) class Hall(db.Model): __tablename__ = "hall" id = db.Column(db.Integer, primary_key=True) client_id = db.Column(db.Integer) # 添加表中其他对应字段... # 在Flask应用上下文内执行查询 with app.app_context(): hall = Hall.query.filter_by(client_id=1).first() print(hall)
方式2:SQL Server身份验证(指定账号密码)
若需用SQL Server账号登录,URI格式如下:
USERNAME = r"NEW-OFFICE\user" PASSWORD = "password" SQLALCHEMY_DATABASE_URI = f"mssql+pyodbc://{USERNAME}:{PASSWORD}@{SERVER}/{DATABASE}?driver={DRIVER.replace(' ', '+')}"
常见错误点说明
- 参数分隔符错误:SQLAlchemy的URI查询参数必须用
&分隔,不能用ODBC连接字符串的; - 驱动名称空格未转义:驱动名称中的空格需替换为
+,否则ODBC驱动管理器无法识别 - 身份验证格式错误:Windows身份验证时,URI无需填写用户名密码,用
//@表示使用当前Windows用户身份 - 服务器名称格式:带实例的服务器名称需写成
SERVERNAME\INSTANCENAME,用原始字符串r''或双重反斜杠\\转义
验证连接
可先单独测试引擎连接,排除模型问题:
from sqlalchemy import create_engine engine = create_engine(SQLALCHEMY_DATABASE_URI) with engine.connect() as conn: result = conn.execute("SELECT * FROM hall WHERE client_id = 1") print(result.fetchone())
内容的提问来源于stack exchange,提问作者Zvi
相关产品推荐
相关产品推荐

