#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 не совсем «из базы данных».