Сообщение Шейлента удовлетворяет запросам OP для эквивалентного кода. Однако он не позволяет адекватно решить вопрос о том, что эквивалентно Python для Perl DBI.
Для тех, кто не знаком с Perl's DBI, он обеспечивает общий интерфейс для всех систем баз данных. Чтобы добавить поддержку для нового хранилища, a database driver or DBD needs to be written. Drivers exist for many different database systems и даже не-базы данных, такие как CSV-файлы и электронные таблицы.
Похоже, что Python DB-API - это самое близкое к Perl DBI. Однако это спецификация, а не реализация. В какой мере любой драйвер базы данных соответствует спецификации до автора.
Конечно, системы баз данных отличаются тем, какие SQL-команды и синтаксис они поддерживают. Базы данных сильно отличаются от того, какие функции они предоставляют. Любая система, которая пытается стандартизировать взаимодействие с базой данных, будет иметь проблемы с переносимостью, поскольку все эти разные системы предоставляют различные наборы функций.
Опыт работы с Perl DBI был очень позитивным. Достаточно просто написать переносимый код, который работает со многими драйверами DBD. Я успешно использовал 4 разных драйвера баз данных (Postgres, MySQL, CSV-файл и SQLite) в одном приложении, просто изменив строку подключения к базе данных. Для более сложных приложений, которым требуется доступ к более «несовместимым» функциям базы данных, существует ряд abstraction libraries, которые расширяют интерфейс DBI и еще больше упрощают переносимость.
У меня недостаточно опыта работы с Python, чтобы иметь возможность сказать, как PEP249 играет в реальном мире. Я надеюсь, что разработчики драйверов баз данных подходят к спецификации, а переносимость легко получить. Возможно, кто-то с более глубоким знанием Python сможет расширить эту тему. Есть information on Python database access at the Python wiki.
@JanHudec Я не вижу какой-либо строковой интерполяции в запросах здесь, в коде. Уточнить? – shylent
Извините, вы правы. –
Должен быть MySQLdb.cursors.DictCursor, но все еще +1 для хорошего примера. –