SQLAlchemy ORM-객체 업데이트
이 장에서는 원하는 값으로 테이블을 수정하거나 업데이트하는 방법을 살펴 봅니다.
개체의 특정 속성 데이터를 수정하려면 새 값을 할당하고 변경 사항을 적용하여 변경 사항을 영구적으로 적용해야합니다.
ID = 2 인 Customers 테이블에서 기본 키 식별자를 가진 테이블에서 객체를 가져 오겠습니다. 세션의 get () 메소드를 다음과 같이 사용할 수 있습니다.
x = session.query(Customers).get(2)
아래 주어진 코드로 선택된 객체의 내용을 표시 할 수 있습니다.
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
고객 테이블에서 다음 출력이 표시되어야합니다.
Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]
이제 아래와 같이 새 값을 할당하여 주소 필드를 업데이트해야합니다.
x.address = 'Banjara Hills Secunderabad'
session.commit()
변경 사항은 데이터베이스에 지속적으로 반영됩니다. 이제 다음을 사용하여 테이블의 첫 번째 행에 해당하는 객체를 가져옵니다.first() method 다음과 같이-
x = session.query(Customers).first()
이것은 다음 SQL 표현식을 실행합니다-
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
LIMIT ? OFFSET ?
바인딩 된 매개 변수는 각각 LIMIT = 1 및 OFFSET = 0이되며 이는 첫 번째 행이 선택됨을 의미합니다.
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
이제 첫 번째 행을 표시하는 위 코드의 출력은 다음과 같습니다.
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]
이제 이름 속성을 변경하고 아래 코드를 사용하여 내용을 표시합니다.
x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
위 코드의 출력은-
Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]
변경 사항이 표시 되더라도 커밋되지 않습니다. 다음을 사용하여 이전 영구 위치를 유지할 수 있습니다.rollback() method 아래 코드로.
session.rollback()
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
첫 번째 레코드의 원본 내용이 표시됩니다.
대량 업데이트의 경우 Query 객체의 update () 메서드를 사용합니다. 접두사 '미스터'를 붙여 보겠습니다. 각 행에 이름을 지정합니다 (ID = 2 제외). 해당 update () 문은 다음과 같습니다.
session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
The update() method requires two parameters as follows −
키가 업데이트 될 속성이고 값이 속성의 새 내용 인 키-값 사전입니다.
세션에서 속성을 업데이트하는 전략을 언급하는 동기화 _ 세션 속성. 유효한 값은 false입니다. 세션을 동기화하지 않는 경우 fetch : 업데이트 전에 선택 쿼리를 수행하여 업데이트 쿼리와 일치하는 개체를 찾습니다. 및 평가 : 세션의 개체에 대한 기준을 평가합니다.
테이블의 4 개 행 중 3 개 행에는 'Mr.'접두사가 붙은 이름이 있습니다. 그러나 변경 사항은 커밋되지 않으므로 SQLiteStudio의 테이블보기에 반영되지 않습니다. 세션을 커밋 할 때만 새로 고쳐집니다.