Каковы реальные уровни абстракции базы данных для Python
Я начинаю участвовать в проекте с открытым исходным кодом Gramps, который исследует переключение их бэкэнда из BSDDB в реляционную базу данных. Либо SQLite, либо MySQL мы не полностью решили и можем даже попытаться сделать это в ограниченной емкости. Я профессиональный разработчик, но я новичок в python, поэтому я не знаком с текущим выбором инструментов/библиотек. Мне было поручено исследовать слои абстракции БД. В настоящее время проводится обсуждение по вики, чтобы сравнить их. Объектный реляционный картограф может быть приятным, но не является абсолютно необходимым. хотя я знаю, что обычно является синонимом уровня абстракции БД. Если ORM включен, запросы на скакалку должны быть доступны без большой борьбы.
Сейчас список включает в себя:
CouchDB
Я еще не изучил это.
DB-API
это, кажется, стандартный api python, и каждый db создает свой собственный модуль, который его использует. Даже BSDDB, похоже, написал один, но я не полностью его изучил. модули взаимозаменяемы?
SQLAlchemy
Кажется, это самый популярный сейчас? но у меня очень ограниченное воздействие на мир python.
SQLObject
Я еще не изучил это.
Итак, каковы представления людей и предложения по уровням абстракции базы данных для python?
Ответы
Ответ 1
Посмотрите внимательно на SQLAlchemy.
Вы можете протестировать и разработать с помощью SQLite.
Вы можете перейти к производству с MySQL - практически не изменяя ваши приложения.
В DB-API, в то время как он широко применяется, обладает достаточной гибкостью: (1) вы не изолированы от вариации SQL в базовых RDBMS и (2) существуют все еще функции драйвера DB, которые трудно скрыть.
Еще один хороший уровень ORM - это ORM, который является частью Django. Вы можете (с небольшим усилием) использовать только Django ORM без использования остальной части веб-фреймворка Django.
Используйте ORM-слой (SQLAlchemy или SQLObject), предпочитающий DB-API.
Почему? Ваша модель должна быть прочной, ясной, продуманной моделью OO. Реляционное сопоставление должно быть вторым после объектной модели. SQLAlchemy делает этот подход разумным.
"Уровень абстракции DB" будет происходить в обычном ходе событий. Действительно, из-за DB-API (как используется SQLAlchemy) вы дали два уровня абстракции: ORM и DB-API.
Ответ 2
Доступ к правильной базе данных из Python почти всегда выполняется с использованием адаптивного модуля, совместимого с DB-API 2.0. Хотя все модули DB-API имеют одинаковые API (или очень похожие, а не все серверы поддерживают все функции), если вы сами пишете SQL, вы, вероятно, будете писать SQL в диалекте, специфичном для продукта, поэтому они не являются взаимозаменяемыми в как они в теории.
Честно говоря, SQLite отлично подходит для вашего использования. Я бы не стал беспокоиться о "встроенных MySQL"; это звучит как худшее из обоих миров. Если вы хотите, чтобы ORM, подобный SQLAlchemy, полностью зависит от вас; есть хорошие аргументы в любом случае. Лично мне не нравятся ORM, но тогда у меня есть математическая степень, поэтому тот факт, что я ценю SQL как язык, наверное, не слишком удивляет:)
Ответ 3
CouchDB не является реляционной базой данных, поэтому он не имеет интерфейса DB-API. Это база данных документов, которая означает, что она не будет столь же полезна для Gramps, потому что для определения связей между связанными людьми потребуются некоторые искажения. Кроме того, он может работать только в режиме клиент/сервер.
Любой ORM, такой как SQLAlchemy, SQLObject или Django ORM, реализован поверх DB-API, и я рекомендую использовать любой из них по прямому DB-API, потому что он может предоставить Gramps гибкость для запуска sqlite во встроенном режиме для локального рабочего стола пользователей, а затем также поделиться, когда-нибудь в будущем, соединение с базой данных Postgresql/MySQL с веб-версией Gramps.
Ответ 4
Мне очень нравится Storm:
Шторм - объектно-реляционный картограф (ORM) для Python, разработанной на Canonical. Проект был более года для развития использование в канонических проектах, таких как Launchpad, и недавно был выпущен как продукт с открытым исходным кодом.
По моему мнению, Storm намного легче изучить, чем SQLAlchemy. Подобен Django ORM.
Ответ 5
web2py имеет уровень абстракции базы данных, который может использоваться автономно. Мы переключались между sqlite3, Microsoft SQL Server, Oracle и MySQL с нулевыми изменениями кода. Впечатлительный.
Ответ 6
Если ваш проект будет когда-либо иметь какую-либо реальную сложность, держитесь подальше от ORM.
http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx
Ответ 7
Когда я начал конвертировать устаревшее приложение для использования ORM, я просмотрел SQLObject и SQLAlchemy. Сначала я пошел с SQLObject, потому что он выглядел знакомым (прошлый опыт Django) и SQLAlchemy казался сложным. Примерно через 2 часа я начал ударять по стенам с помощью SQLObject. Затем я снова посмотрел на SQLAlchemy и был немедленно вознагражден. Он не только понял и отобразил каждую странную таблицу в базе данных, но даже мог сделать еще более странные поиски, которые я должен был сделать позже!
Ответ 8
Я думаю, что CouchDB был бы лучшим выбором для такого проекта, как Gramps.
Полезные функции CouchDB для Gramps: