Форум сайта python.su
Появилась необходимость заимплементить хранение данных в разных объектах - в одном случае это может быть мускль, в другом пикль, в третьем - собственный кэш, опирающийся на данные из БД.
Интерфейсы должны быть максимально пересекающимися (ну там, например, для смены месторасположения данных).
+ хочется сделать так, что бы все было объектно (т.е. маппер там будет).
+ нравится как сделана система запросов (типо: query.filter(Map.in_(), и тому подобные фишки).
Ну и собственно вопрос - стоит ли мучатся с добавлением например, собственно-написанного кэша к алхимии (особенно если учесть что это нифига непохоже на формирование запросов к БД) - или написать внешние интерфейсы отдельно, и для БД использовать алхимию - а для собственных - написать чтото свое?
Офлайн
Есть большое сомнение, что выйдет сделать свой SQL диалект, работающий с собственным кешем - и при этом простой и понятный. А иначе как SQL диалектом в алхимию, думается, нормально встроиться не удастся.
Офлайн
Думаю что второе, свой интерфейс высокого уровня.
..bw
Офлайн
Андрей, а есть ли возможность забить свои действия в диалект. Т.е. насколько я понял идеологию - диалект генерит строку, потому эту строку вызывает engine. А хочется что бы в я создавал движок с ‘mycache://memory’ ну или чтото в таком роде, и при этом не писать отдельный движок, который еще будет парсить строки.
Офлайн
как в алхимии реализовывали такие штуки как,
DbObject.filter(DbObject.name = ‘name’).
как я понимаю маппер модифицирует передаваемые ему классы, но вот где посмотреть что и как он туда добавляет?
Офлайн
cybergrindПри использовании scoped session будет примерно так:
как в алхимии реализовывали такие штуки как,
DbObject.filter(DbObject.name = ‘name’).
Mapped.query.filter_by(name='name')
Mapped.query.filter(Mapped.name=='name')
sess.query(Mapped).filter_by(name='name')
sess.query(Mapped).filter(Mapped.name=='name')
cybergrindпоконкретнее, какая информация нужна?
как я понимаю маппер модифицирует передаваемые ему классы, но вот где посмотреть что и как он туда добавляет?
Офлайн
j2a: спасибо за обзор, но как использовать алхимию я разобрался =)
я хочу реализовать подобное поведение, но для собственного маппера.
т.е. я определяю модель свою
class MyModel(object):
def __init__(self, id, name):
self.id = id
self.name = name
Офлайн
cybergrindХз, может я невнимательно прочитал, а может ты вопрос не совсем точно задал ;)
j2a: спасибо за обзор, но как использовать алхимию я разобрался =)
cybergrindОна манки-патчится – http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/sqlalchemy/orm/mapper.py#L674
чего потом в алхимии делается с моделью, что я могу реализовывать такие конструкции как: …(Mapped.name=='name')…
Отредактировано (Окт. 23, 2008 14:28:13)
Офлайн
> я, конечно, могу просто заменить все аттрибуты на классы, в которых переопределять .__eq__ но как это реализованно в алхимии?
Так и делается, только автоматом, когда пропускаешь класс через mapper.
>>> print repr(Mapper.name)
<sqlalchemy.orm.mapper._CompileOnAttr object at 0xa2a722c>
Отредактировано (Окт. 23, 2008 18:12:05)
Офлайн