Это хороший подход, чтобы избежать использования SQLAlchemy / SQLObject? - PullRequest
3 голосов
/ 24 августа 2009

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

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

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

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

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

Таким образом, по сути, это устраняет необходимость в ORM, поскольку каждая таблица имеет класс для ее представления, а внутри этого класса отдельный dict представляет каждую строку.

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

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

Ответы [ 3 ]

8 голосов
/ 24 августа 2009

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

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

2 голосов
/ 24 августа 2009

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

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

0 голосов
/ 24 августа 2009

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

от http://webpy.org/cookbook/select:

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