2012-06-12 5 views
4

코드 :SQLAlchemy 결과를 임의로 정렬 하시겠습니까? 문제

random_items = random.shuffle(Item.query.all())[20:30] 

그것은 플라스크/SQLAlchemy의 응용 프로그램에 있습니다. Item 모델입니다.

그게 지금하고있는 일이며 작동하지만 실제 데이터 세트를 사용하기 시작하면 재앙이 올 것으로 예상됩니다.

어떻게하면 제대로 할 수 있습니까?

답변

9

나는 당신의 걱정에 대해 완전히 확신하지 못합니다. 대형 데이터 집합을 반환 할 것이므로 큰 목록이 메모리에서 조작 될 것입니까?

그렇다면 이식성에 대해 지나치게 걱정하지 않는다면 SQL 문에서 처리 할 수 ​​있습니다.

Item.query.order_by(func.rand()).offset(20).limit(10).all() 

을 또는 PostgreSQL을에 : 당신은 MySQL을 사용하는 경우 즉, 당신은 할 수

Item.query.order_by(func.random()).offset(20).limit(10).all() 

다른 데이터베이스가 유사한 메커니즘을 가지고, 소위 함수는 타겟팅하는지에 따라 달라집니다. 물론 SQLAlchemy의 백엔드에서 실행될 수있는 범용 애플 리케이션을 작성하려는 경우 제공된 예제를 계속 사용해야 할 수도 있습니다.

+0

고마워요. 그렇습니다. 제 우려는 제가 메모리에 엄청난 목록을 갖고 있었고 앱이 그냥 죽을 것이라는 것이 었습니다. 이제 임의의 항목을 가져올 수 있습니다. :) 감사합니다 – matt

+0

조인이 포함 된 쿼리와 함께 작동합니까? 그것은 나를 위해 아무것도하지 않는 것 같습니다. –

+0

'func'을 가져올 경로를 포함하지 않는 이유는 무엇입니까? 내 말은, 그것은 단지 코드의 라인이며 그것을 언급할만한 가치가 있습니다. 그것은 'from sqlalchemy.sql.expression import func'이어야합니다. – Desprit

관련 문제