为什么在导入时不必指定子模块?

时间:2018-09-26 15:05:48

标签: python import sqlalchemy

看看:

In [1]: from sqlalchemy import select
In [2]: select
Out[3]: <function sqlalchemy.expression.select>

我不明白上面的代码如何工作。您应该始终指定完整路径吗?像这样:

In [1]: from sqlalchemy.sql.expression import select
In [2]: select
Out[2]: <function sqlalchemy.expression.select>

另一个问题:sqlalchemy告诉我路径是sqlalchemy.expression.select,但是“ sql”部分呢。

看看:

In [1]:from sqlalchemy.expression import select
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
     from sqlalchemy.expression import select
ImportError: No module named 'sqlalchemy.expression'

Python为何会忽略这里的sql部分:sqlalchemy.expression.select,而当我尝试使用他自己的路径时,它将不起作用。

请告知

1 个答案:

答案 0 :(得分:0)

这是因为在sqlalchemy的__init__.py中,它从.sql导入select。在表达式下,如何从.sql导入?如果您还查看sqlalchemy.sql的__init__.py,它已经从.expression中的select导入。因此,尝试进行from sqlalchemy.sql.expression时无需提供完整路径import select。您可以from sqlalchemy import select。 如前所述,由于sqlalchemy已从select中的__init__.py导入,因此将忽略sql部分。