2009-08-23 2 views
3

Вместо использования ORM, я рассматриваю следующий подход в Python и MySQL без ORM (SQLObject/SQLAlchemy). Я хотел бы получить некоторые отзывы о том, что это, вероятно, имеет какие-либо негативные долгосрочные последствия, поскольку в краткосрочной перспективе кажется ясным из того, что я могу сказать.Это хороший подход, чтобы избежать использования SQLAlchemy/SQLObject?

Вместо того, чтобы перевести строку из базы данных в объект:

  • каждая таблица представлена ​​классом
  • строка извлекается как Dict
  • объект, представляющий курсор обеспечивает доступ к столу таким образом:

    cursor.mytable.get_by_ids (низкий, высокий)

  • удаление означает установку time_of_removal к ​​текущему времени

Так по существу это избавляет от необходимости ОРМ, поскольку каждая таблица имеет класс для представления его и внутри этого класса, отдельный ДИКТ представляет каждую строку.

Отображение типов тривиально, потому что каждый dict (row), являющийся объектом первого класса в python/blub, позволяет вам узнать класс объекта и, кроме того, низкоуровневая библиотека базы данных в Python обрабатывает преобразование типов в уровень поля в соответствующие типы приложений.

Если вы видите какие-либо потенциальные проблемы с спуском по этой дороге, пожалуйста, дайте мне знать. Благодарю.

ответ

8

Это не устраняет необходимость в ORM. Это является ORM. В таком случае, зачем изобретать колесо?

Есть ли веская причина, по которой вы пытаетесь избежать использования установленного ORM?

+0

Ну, в основном я не хочу, чтобы изучить все входы и выходы из ОРМ, особенно когда мне не нужно 90% функциональности, что она определяет. По той же причине я предпочитаю использовать Блокнот над Microsoft Word большую часть времени. – tirus

+6

Ну, тогда не узнайте, что 90%. По-прежнему поразительно полезно иметь его, если вам когда-нибудь понадобится. Кстати, говоря о редактировании текста, я имел примерно такое же отношение, когда я пробовал Вима; Я достаточно научился передвигаться и набирать, и это было о нем. Но я продолжал находить более продвинутые вещи, которые хотел сделать, ушел, чтобы научиться эффективно их выполнять, и теперь я ниндзя Вима. А Vimja, если хотите. – Eevee

+2

Существуют значительные преимущества использования зрелой ОРМ, такой как зрелая, хорошо протестированная и хорошо документированная. Повторное использование колеса означает, что вы начинаете с нуля, и снова, и все, кто забирает ваш код, теперь, как узнать свой ORM, но без большой документации и учебников. – Soviut

2

Вы по-прежнему будете использовать SQLAlchemy. ResultProxy на самом деле является словарем, когда вы идете на .fetchmany() или подобное.

Использовать SQLAlchemy как инструмент, облегчающий управление соединениями, а также выполнение операторов. Документация в значительной степени разделена по разделам, поэтому вы будете читать только ту часть, которая вам нужна.

0

web.py имеет также достойную абстракцию db (не ORM). Запросы записываются в SQL (не относится к каким-либо rdbms), но ваш код остается совместимым с любым поддерживаемым dbs (sqlite, mysql, postresql и другими).

из http://webpy.org/cookbook/select:

myvar = dict(name="Bob") 
results = db.select('mytable', myvar, where="name = $name")