ORM для Python, который не требует, чтобы мы определили все свойства для классов для таблиц базы данных - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть доступ к большой системе баз данных. Я хотел бы поговорить с ним эффективно.

Существуют ли рамки ORM, такие как SQLAlchemy (я знаю SQLAlchemy), которые не требуют, чтобы мы определяли все свойства для классов для каждой таблицы базы данных?

Поскольку база данных уже существует, моя цель - избежать создания свойств для классов.

1 Ответ

4 голосов
/ 22 ноября 2011

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

def introspect(tablename, *mapper_args, **mapper_kwargs):
  u'given a table name and optional mapper arguments return an ORM class'
  global metadata  # or pass it in, or use OO, whatever
  global engine    # or pass it in, or use OO, whatever
  table = sqlalchemy.Table(tablename, metadata,
      autoload=True, autoload_with=engine)
  class DynamicClass: pass  # you can provide nice __init__, __str__ methods
  return sqlalchemy.orm.mapper(DynamicClass, table,
      *mapper_args, **mapper_kwargs)

Hibernate имеет аналогичную функцию самоанализа, но он генерирует исходные файлы Java и поэтому является операцией во время сборки, а не во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...