чтение схемы дуршлага из файла конфигурации или базы данных

#python #schema #pyramid #colander

#python #схема #пирамида #дуршлаг

Вопрос:

Я некоторое время гуглил, но не смог найти ссылку на то, как извлечь схему дуршлага из файла конфигурации или из базы данных. Я думаю, что это не сложно реализовать, но я, возможно, что-то упустил. Возможно, кто-то делал или видел что-то подобное и мог бы поделиться некоторыми соображениями.

Вот образец схемы дуршлага:

 class PageSchema(colander.MappingSchema):
    title = SchemaNode(String(),
                       title='Page title',
                       description='The title of the page',
                       )
    description  = SchemaNode(String(),
                              title='A short description', 
                              description='Keep it under 60 characters or so',
                              missing = u'',
                              validator=colander.Length(max=79)
                              )
    body = colander.SchemaNode(colander.String(),
                               description='Tell the world',
                               missing = u'')
  

Ответ №1:

Как сказал Майкл, это может не поддерживаться. Если вам это действительно нужно. Вот несколько советов.

Сохраните вашу схему в базе данных по имени, например: «PageSchema». Сохраните все его записи в базе данных со всеми необходимыми параметрами.

Вам нужно было бы сделать что-то подобное:

 for row in rows:
    attrinbutes[row['name']] = build_attribute(row)

schemas[schema_name] = type(schema_name, (colander.MappingSchema,), attributes)
exec('%s = schemas[schema_name]' % schema_name)
  

Другими словами, он загружает все атрибуты и создает класс с использованием оператора типа. Такого рода задача довольно проста и должна работать так же хорошо, как и привычный class синтаксис. exec Вызов предназначен только для ввода имени в locals. Вероятно, вы могли бы использовать locals()[schema_name] = schmea или даже другие области.

Таким образом, вы можете загружать схемы из любого места, если это необходимо. Вы могли бы создать себе фабрику, подобную:

  • schemas.get('PageSchema') это вернет схему, если это возможно, или нет, если отсутствует.

Вот и все!

Ответ №2:

Это не поддерживается дуршлагом. Единственное, что я знаю в этой области, — это пакет «limone», который делает обратное. Он способен генерировать произвольные объекты python из схемы дуршлага.

Ответ №3:

ColanderAlchemy может сделать то, что вам нужно. Он принимает объекты SQLAlchemy и генерирует из них схему дуршлага. Однако генерация из объекта SQLAlchemy не совсем «из базы данных».