Python导入库的机制是怎样的?为何import sqlalchemy后无法调用create_engine
核心原因是两种import方式的命名空间处理逻辑不同
- 第一种写法
import sqlalchemy确实导入了sqlalchemy库的全部内容,但所有内容都挂载在sqlalchemy这个独立的命名空间下,不会直接暴露到你当前代码的全局命名空间中。此时你要调用create_engine需要带上命名空间前缀,正确写法是sqlalchemy.create_engine(),你直接写create_engine()的话,Python只会在当前全局命名空间里搜索这个名字,找不到就会抛出未定义的报错。 - 第二种写法
from sqlalchemy import create_engine是直接把create_engine这个方法从sqlalchemy的命名空间中提取出来,导入到你当前代码的全局命名空间里,所以你可以直接调用create_engine(),不需要加前缀,运行自然正常。
可以用一个很简单的类比理解:你可以把第三方库当成一个装了各类工具的收纳盒,import 库名相当于你把整个收纳盒放到桌面上,要用里面的改锥必须说明是「收纳盒里的改锥」才能拿到;from 库名 import 工具名相当于你直接把改锥从收纳盒里拿出来放在桌面上,直接说「改锥」就能直接用。
内容的提问来源于stack exchange,提问作者Chicken Sandwich No Pickles
相关产品推荐
相关产品推荐

