Почему мне не пришлось указывать субмодули при импорте? - PullRequest
0 голосов
/ 26 сентября 2018

Взгляните:

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 голосов
/ 26 сентября 2018

Это потому, что в __init__.py в sqlalchemy он импортирует select из .sql.Как он импортирует из .sql, когда он находится под выражением?Если вы также посмотрите на __init__.py в sqlalchemy.sql, он уже импортирует из select из .expression.Следовательно, нет необходимости указывать полный путь from sqlalchemy.sql.expression при попытке import select.Вы могли бы просто from sqlalchemy import select.Как уже упоминалось, поскольку sqlalchemy уже импортирует из select в __init__.py, часть sql игнорируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...