read_sql
задокументировано как принимающий объект Connectable
. Строго говоря, это означает, что это будет экземпляр SqlAlchemy.engine.Connectable
или его подкласс, но важно только то, что он ведет себя как такой экземпляр. Грубо говоря, вы можете передать все, что «похоже» на Connectable
, в том числе, например, tt предоставляет метод connect
, который принимает те же типы аргументов, что и sqlalchemy.engine.Connectable.connect
.
Другими словами важен не точный тип, а интерфейс к типу, который вы передаете. Python относится к этому как печать утки : если объект выглядит как утка и ведет себя как утка, он может использоваться чем-то, что требует утки, даже если это не утка.