import module импортируется весь модуль.  Доступ к объектам внутри модуля осуществляется через module.object.
  from module import ... импортируются только указанные объекты из модуля.  К этим объектам можно обращаться напрямую, без префикса module..  Импорт всего содержимого модуля можно сделать с помощью from module import *, но это не рекомендуется из-за возможных конфликтов имен.
Разница между import module и from module import ... заключается в том, как вы получаете доступ к элементам (функциям, классам, переменным) внутри модуля:
import module:
module.function_name() или module.ClassName.import math
print(math.sqrt(16))  # Доступ к функции sqrt через math.sqrt
from module import ...:
function_name() или ClassName.from module import * для импорта всех элементов модуля, но это крайне не рекомендуется, так как увеличивает вероятность конфликтов имен и ухудшает читаемость кода.from math import sqrt, pi
print(sqrt(16))    # Доступ к функции sqrt напрямую
print(pi)       # Доступ к константе pi напрямую
from datetime import datetime as dt #Импорт datetime с переименованием
now = dt.now()
print(now)
Краткое сравнение:
import module: Безопаснее (меньше конфликтов), более явно, но требует больше набора текста.from module import ...: Меньше набора текста, но более рискованно (больше конфликтов), менее явно.В целом, выбор между этими двумя способами зависит от конкретной ситуации и стиля кодирования. Важно учитывать потенциальные конфликты имен и читаемость кода.