指定数据库时Flask-SQLAlchemy连接URI无法正常工作
Flask-SQLAlchemy连接MS SQL Server 2017指定数据库报错问题
正常工作场景(未指定数据库)
未指定数据库时,连接字符串可正常连接默认的master数据库,并成功创建表,代码示例:
# 此代码可正常运行 app.config["SQLALCHEMY_DATABASE_URI"]= "mssql+pyodbc://<myuser>:<mypw>@SQL2017" db = SQLAlchemy(app) class VideoModel(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(100), nullable = False) views = db.Column(db.Integer, nullable = False) likes = db.Column(db.Integer, nullable = False) def __repr__(self) -> str: return f"Video(name = {name}, views = {views}, likes = {likes})" db.create_all()
指定数据库后报错
在连接字符串中添加数据库名后,会抛出接口错误,即使已在DBMS中手动创建该数据库,问题依然存在,代码示例:
# 此代码无法运行 app.config["SQLALCHEMY_DATABASE_URI"]= "mssql+pyodbc://<myuser>:<mypw>@SQL2017/videosDB" db = SQLAlchemy(app) class VideoModel(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(100), nullable = False) views = db.Column(db.Integer, nullable = False) likes = db.Column(db.Integer, nullable = False) def __repr__(self) -> str: return f"Video(name = {name}, views = {views}, likes = {likes})" db.create_all()
错误信息
sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
可行的替代方案
通过创建engine时,使用connect_args参数指定数据库名的方式可正常工作,代码示例:
# 此代码可正常运行 cargs = {'database': "quotesDB"} self.engine = create_engine("mssql+pyodbc://<myuser>:<mypw>@SQL2017", connect_args=cargs)
内容的提问来源于stack exchange,提问作者ShengXue
相关产品推荐
相关产品推荐

