以下代码有效:
class
但是,以下内容:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
抛出:import sqlalchemy
Base = sqlalchemy.ext.declarative.declarative_base()
。怎么会这样?
答案 0 :(得分:2)
sqlalchemy
是一个包,导入包不会自动加载其子模块。当你这样做
import sqlalchemy
Base = sqlalchemy.ext.declarative.declarative_base()
导入系统未加载sqlalchemy.ext
子模块,因为您没有要求它。
当你这样做时
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
您明确要求加载sqlalchemy.ext
和sqlalchemy.ext.declarative
,因此访问权限有效。
你也可以做到
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base()
也会加载sqlalchemy.ext
和sqlalchemy.ext.declarative
。
某些软件包会自动将其子模块加载到__init__.py
内,因此您无需显式导入子模块。不过,这不是你应该依赖的东西。