Найти - Пользователи
Полная версия: SQLAlchemy?
Начало » Базы данных » SQLAlchemy?
1
cybergrind
Появилась необходимость заимплементить хранение данных в разных объектах - в одном случае это может быть мускль, в другом пикль, в третьем - собственный кэш, опирающийся на данные из БД.

Интерфейсы должны быть максимально пересекающимися (ну там, например, для смены месторасположения данных).
+ хочется сделать так, что бы все было объектно (т.е. маппер там будет).

+ нравится как сделана система запросов (типо: query.filter(Map.in_(), и тому подобные фишки).

Ну и собственно вопрос - стоит ли мучатся с добавлением например, собственно-написанного кэша к алхимии (особенно если учесть что это нифига непохоже на формирование запросов к БД) - или написать внешние интерфейсы отдельно, и для БД использовать алхимию - а для собственных - написать чтото свое?
Андрей Светлов
Есть большое сомнение, что выйдет сделать свой SQL диалект, работающий с собственным кешем - и при этом простой и понятный. А иначе как SQL диалектом в алхимию, думается, нормально встроиться не удастся.
bw
Думаю что второе, свой интерфейс высокого уровня.

..bw
cybergrind
Андрей, а есть ли возможность забить свои действия в диалект. Т.е. насколько я понял идеологию - диалект генерит строку, потому эту строку вызывает engine. А хочется что бы в я создавал движок с ‘mycache://memory’ ну или чтото в таком роде, и при этом не писать отдельный движок, который еще будет парсить строки.
cybergrind
как в алхимии реализовывали такие штуки как,

DbObject.filter(DbObject.name = ‘name’).
как я понимаю маппер модифицирует передаваемые ему классы, но вот где посмотреть что и как он туда добавляет?
j2a
cybergrind
как в алхимии реализовывали такие штуки как,

DbObject.filter(DbObject.name = ‘name’).
При использовании scoped session будет примерно так:
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
как я понимаю маппер модифицирует передаваемые ему классы, но вот где посмотреть что и как он туда добавляет?
поконкретнее, какая информация нужна?
cybergrind
j2a: спасибо за обзор, но как использовать алхимию я разобрался =)
я хочу реализовать подобное поведение, но для собственного маппера.
т.е. я определяю модель свою
class MyModel(object):
def __init__(self, id, name):
self.id = id
self.name = name
чего потом в алхимии делается с моделью, что я могу реализовывать такие конструкции как: …(Mapped.name=='name')…

т.е. я, конечно, могу просто заменить все аттрибуты на классы, в которых переопределять .__eq__ но как это реализованно в алхимии?
j2a
cybergrind
j2a: спасибо за обзор, но как использовать алхимию я разобрался =)
Хз, может я невнимательно прочитал, а может ты вопрос не совсем точно задал ;)

cybergrind
чего потом в алхимии делается с моделью, что я могу реализовывать такие конструкции как: …(Mapped.name=='name')…
Она манки-патчитсяhttp://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/sqlalchemy/orm/mapper.py#L674
bw
> я, конечно, могу просто заменить все аттрибуты на классы, в которых переопределять .__eq__ но как это реализованно в алхимии?
Так и делается, только автоматом, когда пропускаешь класс через mapper.
>>> print repr(Mapper.name)
<sqlalchemy.orm.mapper._CompileOnAttr object at 0xa2a722c>
p.s. Не заметил ответ j2a :-). Да, именно так.

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB