Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
.filter(User.id >= 100) User->id->gte(100)
return (SettlementLine.query(Settlement, Payment, Order, Event)
.join(Payment)
.join((Settlement, SettlementLine.psp_settlement_line_id == Settlement.id))
.join(Order)
.join(Event)
.outerjoin(IdsLine)
.outerjoin(IdsBatch)
.filter((SettlementLine.batch == None) &
(SettlementLine.settle_after < datetime.now()) &
(SettlementLine.source == SettlementLine.Source.ECOMMERCE) &
((Order.domain_id == Route.domain_id) |
(IdsBatch.status == IdsBatch.State.RECEIVED)))
.all())
qs = SettlementLine.filter(batch=None).filter(settle_after < datetime.now).filter(SettlementLine.source=SettlementLine.Source.ECOMMERCE))
result = qs.get( Q(order_domain_id=Rout.domain_id) | Q(idsbatch.status = idsbatch.state.RECEIVED) )
Поэтому я вижу идеальный случай этого топика среди профессионалов так — пост, и вопросы в комментах про особенности реализации. И типа почему сделано так, а не так?
def q_on_time(self):
return self.make_query(
self.lproject_and_taskhistory_join,
(self.taskhistory_filters_statuses + self.task_not_canceled +
self.date_filter(Task.sa.completion_completed)),
(Task.sa.delivered_on_time, Task.sa.id)
).group_by(Task.sa.id).\
add_columns( (Task.sa.delivered_on_time == 1).label('delivered') ).\
from_self().group_by(*self.grouper).\
add_columns(
(func.sum(expression.column('delivered')) / func.count(Task.sa.id)).label('on_time')
)
return (order_models.Order.query(order_models.OrderLine, product_models.Product, v1, event_models.Event, rm.TicketwareUser)
.join(order_models.OrderLine)
.join((event_models.Event, event_models.Event.id == order_models.OrderLine.event_id))
.join((product_models.Product, product_models.Product.id == order_models.OrderLine.product_id))
.join((_Value, _Value.instance_id == order_models.Order.id))
.join((_Field, _Field.id == _Value.field_id))
.join((v1, v1.instance_id == order_models.Order.id)).join((f1, f1.id == v1.field_id))
.join((v2, v2.instance_id == order_models.Order.id)).join((f2, f2.id == v2.field_id))
.join((rm.TicketwareUser, rm.TicketwareUser.id == v2.value))
.filter((_Value.value == prog_id) &
(_Field.name == 'prog_id') &
(f1.name == 'pay_method') &
(f2.name == 'user_id') &
(order_models.Order.created > last_z))
.order_by(order_models.Order.created)
.all())
items = (GuestListEntry.query(GuestListEntryDispatch, EticketDownloadHistory)
.outerjoin(GuestListEntryDispatch)
.join((Order, (Order.client_id == GuestListEntry.id) &
(Order.is_guest == True)))
.outerjoin(EticketDownloadHistory)
.filter(GuestListEntry.batch_id == batch.id)
.all())>>> mongo.users.save({"user": "Vassily", "groups": ["admins", "django gays"]})
>>> mongo.users.save({"user": "Anatole", "groups": ["django gays", "kewl hakers"]})
>>> mongo.users.find({"groups": "django_gays"})
[, ]
>>> mongo.users.find({"groups": "admins"})
[]
>>> mongo.users.save({"user": "Darkwing Duck", "groups": {"cloak": "violet"}})
>>> mongo.users.save({"user": "Batman", "groups": [{"cloak": "black"}, {"shmested": "woo"}]})
>>> mongo.users.find({"groups.cloak": "black"})
[]
Это дефолтный драйвер, есть более сахарные.
Всегда ваш, КО.>>> mongo.users.save({"user": "Vassily", "groups": ["admins", "django gays"]})
>>> mongo.users.save({"user": "Anatole", "groups": ["django gays", "kewl hakers"]})
>>> mongo.users.find({"groups": "django_gays"})
[Vassily, Anatole]
>>> mongo.users.find({"groups": "admins"})
[Vassily]
>>> mongo.users.save({"user": "Darkwing Duck", "groups": {"cloak": "violet"}})
>>> mongo.users.save({"user": "Batman", "groups": [{"cloak": "black"}, {"shmested": "woo"}]})
>>> mongo.users.find({"groups.cloak": "black"})
[Batman]
q=session.query(Users).filter(User.id > 100)SELECT * FROM users WHERE users.id = %{par_1}s{'par_id': 100}q вытащить этот самый {'par_id': 100}REQUIRED = validators.required(_('This field is required.'))
items = (GuestListEntry.query(GuestListEntryDispatch, EticketDownloadHistory)
.outerjoin(GuestListEntryDispatch)
.join((Order, (Order.client_id == GuestListEntry.id) &
(Order.is_guest == True)))
.outerjoin(EticketDownloadHistory)
.filter(GuestListEntry.batch_id == batch.id)
.all())
(GuestListEntry.query(GuestListEntryDispatch, EticketDownloadHistory)
.outerjoin(GuestListEntryDispatch)
.join((Order, (Order.client_id == GuestListEntry.id) &
(Order.is_guest == True)))
.outerjoin(EticketDownloadHistory)
.filter(GuestListEntry.batch_id == batch.id)
.all())==SELECT GuestListEntryDispatch.*, EticketDownloadHistory
FROM GuestListEntryDispatch, EticketDownloadHistory
OUTER JOIN GuestListEntryDispatch
JOIN Order ON (order.client_id == GuestListEntry.id AND Order.is_guest == true)
OUTER JOIN EticketDownloadHistory
WHERE GuestListEntry.batch_id == batch.idSELECT * // тут все поля будут перечислены явно для GuestListEntryDispatch и EticketDownloadHistory
FROM GuestListEntry
OUTER JOIN GuestListEntryDispatch // ON условие пропущено,
// на самом деле оно в определении relationship
// поэтому я его не смогу написать, но оно будет
JOIN Order ON (order.client_id == GuestListEntry.id AND Order.is_guest == true)
OUTER JOIN EticketDownloadHistory // и тут ON не написать без определения
WHERE GuestListEntry.batch_id == %% // а здесь плейсхолдер на самом деле
Session.query(GuestListEntryDispatch, EticketDownloadHistory).join(GuestListEntry),...Но почему я ей до сих пор пользуюсь? Ответ стар как мир — ничего лучше я не видел. RoR — это вообще сам Тартар, Pylons — это его младший брат, и оба переполнены магией выше крыши не только внутри, но и в приложениях. Этим джанга хороша — несмотря на то, что там внутри происходит, все приложения очень часто абсолютно прозрачны и просты для понимания. Главное — не пытаться сделать то, чего Джанга не позволяет. Она этого не любит.
select ... for update;select ... from a join b (a.id = any(b.descendants)) -- b.descendants - int[]
insert into ... select ... from ...
update ... from (values ...) where ...
SQLAlchemy для Django