Найти - Пользователи
Полная версия: sqlobject - разница в датах в select
Начало » Базы данных » sqlobject - разница в датах в select
1
pythonwin
всем привет!
есть бд со следующей структурой:
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
хорошо бы вообще написать в одну строку или даже одним запросом
j2a
Ух. Читай PEP8. Может, конечно, есть внутренний глубокий смысл чтобы rating называть с заглавной, и order_date тоже, и сокращать amount до amt, но читабельности это не прибавляет – факт. Названия переменных/функций тоже не блещут логикой: “select9_1”, “select9”, “list1” - примеры как не надо называть функции/переменные.

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

В общем, сформулируй свою задачу словами.
pythonwin
j2a
примеры как не надо называть функции/переменные.
согласен - самого напрягает - названия не от меня зависели - за ссылку спасибо

j2a
В общем, сформулируй свою задачу словами.
нужно вывести клиентов(заказчиков), которые ежедневно регистрировали заказы, если заказчик в один день разместил более одного заказа, то заказ должен учитываться только один раз, например: заказчик, который сделал все заказы в один нет не должен быть выведен :)
balu
pythonwin
согласен - самого напрягает - названия не от меня зависели
Выбор sqlobject тоже ;-) ?
j2a
Преждевременная оптимизация – зло. Я не знаю, можно ли это сделать при помощи 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;
Киса
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