Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2008 18:30:53

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy?

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

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

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

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



Офлайн

#2 Окт. 14, 2008 19:43:39

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

SQLAlchemy?

Есть большое сомнение, что выйдет сделать свой SQL диалект, работающий с собственным кешем - и при этом простой и понятный. А иначе как SQL диалектом в алхимию, думается, нормально встроиться не удастся.



Офлайн

#3 Окт. 15, 2008 11:17:18

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

SQLAlchemy?

Думаю что второе, свой интерфейс высокого уровня.

..bw



Офлайн

#4 Окт. 17, 2008 15:07:47

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy?

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



Офлайн

#5 Окт. 23, 2008 12:15:53

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy?

как в алхимии реализовывали такие штуки как,

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



Офлайн

#6 Окт. 23, 2008 12:29:00

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy?

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
как я понимаю маппер модифицирует передаваемые ему классы, но вот где посмотреть что и как он туда добавляет?
поконкретнее, какая информация нужна?



Офлайн

#7 Окт. 23, 2008 14:15:27

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

SQLAlchemy?

j2a: спасибо за обзор, но как использовать алхимию я разобрался =)
я хочу реализовать подобное поведение, но для собственного маппера.
т.е. я определяю модель свою

class MyModel(object):
def __init__(self, id, name):
self.id = id
self.name = name
чего потом в алхимии делается с моделью, что я могу реализовывать такие конструкции как: …(Mapped.name=='name')…

т.е. я, конечно, могу просто заменить все аттрибуты на классы, в которых переопределять .__eq__ но как это реализованно в алхимии?



Офлайн

#8 Окт. 23, 2008 14:27:46

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

SQLAlchemy?

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

cybergrind
чего потом в алхимии делается с моделью, что я могу реализовывать такие конструкции как: …(Mapped.name=='name')…
Она манки-патчитсяhttp://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/sqlalchemy/orm/mapper.py#L674



Отредактировано (Окт. 23, 2008 14:28:13)

Офлайн

#9 Окт. 23, 2008 18:08:10

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

SQLAlchemy?

> я, конечно, могу просто заменить все аттрибуты на классы, в которых переопределять .__eq__ но как это реализованно в алхимии?
Так и делается, только автоматом, когда пропускаешь класс через mapper.

>>> print repr(Mapper.name)
<sqlalchemy.orm.mapper._CompileOnAttr object at 0xa2a722c>
p.s. Не заметил ответ j2a :-). Да, именно так.

..bw



Отредактировано (Окт. 23, 2008 18:12:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version