2012-02-20 2 views
1

Похоже, MySQLdb, psycopg2 и cx_Oracle имеют симпатичные интерфейсы для подключения к базам данных. Так это звучит разумно, чтобы создать завод, который кто-то может использовать так:python - ищет фабрику драйверов db

conn = DBDriverFactory("MySQL", connectionDetails) 

Но сначала я хочу убедиться, что:

  1. Я не хватает какой-то лучшее решение, и моя идея не очень глупый.
  2. Нет такого хорошо известного рабочего решения, чтобы предотвратить переосмысление колеса.

Я знаю, что django и алхимия должны делать это, но я ищу что-то очень легкое и простое (но эффективное и элегантное).

ответ

0

Причина, по которой это не существует как «легкое и простое» решение, заключается в том, что большинство SQL-систем баз данных используют разные синтаксисы SQL, различные параметры DB-API и иногда тонко различную семантику, поэтому изменение базы данных не так просто, как изменение модуль DB-API для использования. Для реальной абстракции потребуется разбор SQL и создание нового SQL, подходящего для используемой базы данных.

Я не знаю ни одного пакета, который пытается это сделать, поскольку общий подход (и намного проще) заключается в создании SQL-кода, специфичного для двигателя, из более легко анализируемой формы (например, классы ORM, подобные SQLAlchemy и ORM Django вы создаете.)

+0

Мое представление об общем интерфейсе основано на факте, что все упомянутые бэкенды db отображают объект курсора с помощью методов execute, fetchone и fetchall. Для простых операций, таких как вставка, выбор, обновление, удаление этого объема, достаточно, и различия в диалектах SQL должны быть незначительными. – mnowotka

+0

DB-API определяет функции, классы и методы, которые должны предоставлять модули базы данных, да. Вы по-прежнему остаетесь с разными параметрами, а также с множеством различий в синтаксисе SQL. Только сама параммическая проблема означает, что «общее подмножество» синтаксиса SQL всего двух разных движков базы данных будет действительно довольно и весьма ограниченным. –

Смежные вопросы