Форум сайта python.su
всем привет!
есть бд со следующей структурой:
from sqlobject import * from sqlobject.sqlbuilder import EXISTS, Select from datetime import datetime import time class Customer(SQLObject): name = UnicodeCol() city = ForeignKey("City") Rating = IntCol() salespeople = ForeignKey("SalesPeople") orders = MultipleJoin("Order1") class Order1(SQLObject): Amt = FloatCol() Odate = DateTimeCol() salespeople = ForeignKey("SalesPeople") customer = ForeignKey("Customer") class SalesPeople(SQLObject): name=UnicodeCol() comm = FloatCol() city = ForeignKey("City") customers = MultipleJoin("Customer", joinColumn="salespeople_id") orders = MultipleJoin("Order1") class City(SQLObject): name = UnicodeCol() customers = MultipleJoin("Customer", joinColumn="city_id") peoples = MultipleJoin("SalesPeople", joinColumn="city_id") connection_string = "postgres://user:11111111@localhost:5432/test1" connection = connectionForURI(connection_string) sqlhub.processConnection = connection
def select9_1(list1): prev=None for order in list1: if prev==None: pass elif (prev-time.mktime(order.Odate.timetuple()))<=172800.0: return True prev = time.mktime(order.Odate.timetuple()) return False def select9(): k = 0 for cus in Customer.select(): if select9_1(cus.orders): k+=1 print cus.name print "k = ", k
Офлайн
Ух. Читай PEP8. Может, конечно, есть внутренний глубокий смысл чтобы rating называть с заглавной, и order_date тоже, и сокращать amount до amt, но читабельности это не прибавляет – факт. Названия переменных/функций тоже не блещут логикой: “select9_1”, “select9”, “list1” - примеры как не надо называть функции/переменные.
И еще. Лучше бы ты словами объяснил, чего тебе надо. Потому как вместо двух действий (понять чего тебе надо, придумать решение), приходится делать три (расшифровать твой код, догадаться чего тебе нужно, придумать решение).
В общем, сформулируй свою задачу словами.
Офлайн
j2aсогласен - самого напрягает - названия не от меня зависели - за ссылку спасибо
примеры как не надо называть функции/переменные.
j2aнужно вывести клиентов(заказчиков), которые ежедневно регистрировали заказы, если заказчик в один день разместил более одного заказа, то заказ должен учитываться только один раз, например: заказчик, который сделал все заказы в один нет не должен быть выведен :)
В общем, сформулируй свою задачу словами.
Офлайн
pythonwinВыбор sqlobject тоже ;-) ?
согласен - самого напрягает - названия не от меня зависели
Офлайн
Преждевременная оптимизация – зло. Я не знаю, можно ли это сделать при помощи ORM, на чистом SQL это делается двойной выборкой из orders, что-то типа
sqlite> select * from customers;
1 Рога и копыта
2 Бендер и Ко
3 Киса
sqlite> select * from orders;
1 3 10 20070326
2 3 3 20070325
3 3 15 20070324
4 1 20 20070324
5 1 7 20070324
sqlite> SELECT DISTINCT c.name
...> FROM customers AS c
...> INNER JOIN orders AS o1 ON c.id = o1.customer_id
...> INNER JOIN orders AS o2 ON c.id = o2.customer_id
...> WHERE
...> o1.id < o2.id AND
...> o1.order_date - o2.order_date = 1;
Киса
Отредактировано (Март 26, 2007 17:54:20)
Офлайн