2009-10-18 2 views
0

나는 클래스가 accountDebit 또는 accountCredit)하지만, 날짜 별 정렬 :조합은

def GetTransactions(self): 
    transactions = [] 
    transactions_debit = db.GqlQuery('SELECT * FROM Transaction ' + 
            'WHERE accountDebit=:1',self) 
    transactions_credit = db.GqlQuery('SELECT * FROM Transaction ' + 
            'WHERE accountCredit=:1',self) 
    for x in transactions_debit: 
     x.amount = -x.amount 
     transactions.append(x) 
    for x in transactions_credit: 
     x.amount = x.amount 
     transactions.append(x) 
    return transactions 

목적은이 두 결과의 종류와 조합을 만드는 것입니다,하지만 한계와 + 오프셋. 당신은 ... 하나의 쿼리에서 1000 개 이상의 행을 가져

당신이 돌봐에 OR을 (파이썬은 힘들게 응용 프로그램 수준에서 당신을 위해 그것을 합성) 할 수

답변

2

도와주세요 수 없다는 사실을 고려 "정렬과 결합". 그러나 1000 개 이상의 트랜잭션에 대해 걱정할 필요가 있다면 도움이되지 않습니다. 오프셋 및 제한의 합은 1000으로 제한됩니다!). 당신은 무언가 (아마 당신이 정렬하고있는 동일한 필드, tran_date 상상할 수 있습니까?)를 슬라이스 할 필요가있을 것입니다. 물론 그곳에는 < 두 개의 조건이 있습니다. 물론 정확한 한계와 오프셋을 보장 할 수는 없습니다. 당신은 그것들을 약간 넘어야하고 애플리케이션 레벨에서 eccess를 잘라야합니다.

편집 : 또는 실제로 예를 들어, 당신은 (물론의 응용 프로그램 수준에서) 스스로 합성 할 필요가 있으므로, (!있는 두 가지 작업이 = IN과) 응용 프로그램 수준에서 합성되지 않습니다

def GetTransactions(account): 
    transactions = list(db.GqlQuery(
     'SELECT * FROM Transaction WHERE ' 
     'accountDebit = :1 ORDER BY Tran_date', account)) 
    transactions.extend(db.GqlQuery(
     'SELECT * FROM Transaction WHERE ' 
     'accountCredit = :1 ORDER BY Tran_date', account)) 
    transactions.sort(key=operator.attrgetter('Tran_date')) 
    return transactions 

하지만 큰 문제는 위에 설명 된 문제입니다.

그래서 사용자의 일반적인 거래 수 (일주일 또는 일당), 사용자의 일반적인 최대 합계, 오프셋 및 한도에서 필요한 크기 순서는 무엇입니까? , 등, 등? !이 숫자의 크기의 주문 어떤 생각을하지 않고 특정 설계 선택을 제안하기 위해 하드 -)

편집 : 각의 크기의 순서에 대한 최적의, 또는 합리적인 것 해결책은 없다 이러한 매개 변수 - 사용자 당 하루에 수 백만 건의 거래를 효율적으로 처리하는 방법은 사용자 당 하루에 몇 건의 거래를 처리하는 방법과 크게 다를 것입니다. 두 경우 모두에서 의미가있는 아키텍처를 상상조차 할 수 없습니다 (아마도 관계형 컨텍스트에서는 가능하지만 비 관계형 아키텍처에서는 그렇지 않을 수도 있습니다. 예를 들어, 하루에 수백만 건의 트랜잭션을 처리 할 수 ​​있습니다. 실제로 트랜잭션 날짜를 기록하는 것보다 세분화 된 타임 스탬프가 필요합니다. -).

+0

나는 "예를 들어 노조를 돌보는"예를 보지 못했을 까봐 두렵다. – manda

+0

실제로,이 순간에는 많은 거래가 없습니다. 앱은 아직 개발 단계에 있습니다. 그러나, 나는 그것이 거래의 수에 관계없이 독립적으로 작동하게하고 싶습니다. 아이디어가 있지만 아직 깨닫지 못했습니다. account, tran_date 및 트랜잭션 참조에 대한 참조라는 3 가지 속성을 포함하는 추가 클래스를 만들 수 있습니다. 거래를 할 때마다이 유형의 엔티티 2 개를 넣어야합니다. 이 방법을 사용하면 계정별로 limit + offset 레코드를 쉽게 선택하고 참조로이 트랜잭션을 가져옵니다. – manda

+0

@manda, 내 나쁜 - 'IN'과'! ='는 앱 수준에서 합성 된 두 가지 연산이며 'OR'은 존재하지 않습니다 (따라서 앱 수준에서 직접해야합니다. 방법). –

관련 문제