Jupyter使用SQLAlchemy连接MSSQL报create_engine未定义错误
SQLAlchemy连接SQL Server报
create_engine未定义问题修复 报错根因
你虽然写了from sqlalchemy import create_engine导入语句,但出现NameError只有两种可能:
- 当前Jupyter Notebook绑定的conda环境没有安装sqlalchemy包,导入语句实际执行失败了,你没注意到导入单元格的报错就直接运行了后续创建连接的代码
- 之前运行的代码里误删/覆盖了
create_engine函数(比如定义过同名变量、执行过del create_engine),导致函数名无法被识别
前置修复步骤
先解决导入报错的问题:
- 在Notebook新建单元格单独执行
from sqlalchemy import create_engine,如果直接报错提示找不到sqlalchemy模块,就在当前单元格执行安装命令:
!conda install -y sqlalchemy pyodbc
- 安装完成后点击菜单栏
Kernel->Restart Kernel重启运行内核,清空之前的所有变量缓存
一定要重启内核才能让新安装的包生效,同时清空之前的错误变量缓存 - 重启后先跑导入语句,确认没有报错再继续后续逻辑
现有代码其他问题修正
解决导入问题后,你原来的代码还有3处会导致连接/运行失败的错误,需要一并修改:
- 连接字符串协议前缀写错:pyodbc连接SQL Server的前缀不是
msql://,要改成mssql+pyodbc:// - 服务器名里的反斜杠存在转义问题:
\SQLEXPRESS里的\S会被Python识别为转义字符,需要在字符串前加r标记为原始字符串 - 末尾拼写错误:pandas查看字段类型的属性是
dtypes,你多写了一个e成了dtypese,会触发属性不存在报错 - 额外注意:连接URL里的驱动名如果带空格,需要做URL转义,把空格替换成
+避免解析失败
修正后完整代码
from sqlalchemy import create_engine import pyodbc import pandas as pd SERVER = r'BEAST-ACTIVE\SQLEXPRESS' # 原始字符串避免反斜杠转义 DATABASE = 'SQLTUTORIAL' DRIVER = 'SQL Server' USERNAME = 'abcd' PASSWORD = 'abcd123' # 修正连接前缀,转义驱动名空格 DATABASE_CONNECTION = f'mssql+pyodbc://{USERNAME}:{PASSWORD}@{SERVER}/{DATABASE}?driver={DRIVER.replace(" ", "+")}' engine = create_engine(DATABASE_CONNECTION) connection = engine.connect() data = pd.read_sql_query( """ SELECT * from [SQLTUTORIAL].[dbo].[EmployeeDemographics] order by [EmployeeID] """, connection ) print(data.dtypes) data
额外排错提示
如果运行时提示找不到指定驱动,新建单元格执行下面的代码查看本机已安装的所有SQL Server驱动,替换代码里的DRIVER值即可:
import pyodbc print(pyodbc.drivers())
内容的提问来源于stack exchange,提问作者Julio Diaz
相关产品推荐
相关产品推荐

