2010-08-03 4 views
1

그래서 처음에는 가져 오는하고 행 : 이론SqlAlchemy를 사용하여 for 루프에서 개체를 업데이트하는 것이 이론상 효과가 있습니까?

q = session.query(products) 

for p in q: 
    p.someproperty = 23 

    session.commit() 

해야 위의 작업? 아니면 잘못된 패턴입니까?

속성을 수정할 수 없다는 오류가 발생했습니다. 이상한 점 때문에 근본적으로 잘못된 것을 수행하고있는 것으로 생각했습니다.

답변

2

2 일 :

첫째, 당신은 모든 변경 후 commit() 필요가 없습니다. 다음을 수행 할 수 있어야합니다.

및 숫자 2,이 스레드는 여기 Efficiently updating database using SQLAlchemy ORM을 참조하십시오. 이것은 구문의 또 다른 예를 보여주고 있으며, 허용 된 대답은이 대량 업데이트를 수행하는보다 효율적이고 효율적인 방법을 제시합니다.

1

개체를 수정하려면 명시 적으로 개체를 가져와야합니다. session.query(query_string).all() 이상으로 반복해야합니다. 물론 루프가 완료된 후 단일 커밋이 더 효율적입니다.

관련 문제