SQLAlchemy ORM - Cập nhật đối tượng

Trong chương này, chúng ta sẽ thấy cách sửa đổi hoặc cập nhật bảng với các giá trị mong muốn.

Để sửa đổi dữ liệu của một thuộc tính nhất định của bất kỳ đối tượng nào, chúng ta phải gán giá trị mới cho nó và cam kết các thay đổi để thay đổi được duy trì.

Hãy để chúng tôi tìm nạp một đối tượng từ bảng có mã định danh khóa chính, trong bảng Khách hàng của chúng tôi với ID = 2. Chúng ta có thể sử dụng phương thức get () của phiên như sau:

x = session.query(Customers).get(2)

Chúng tôi có thể hiển thị nội dung của đối tượng đã chọn với mã cho sẵn bên dưới:

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Từ bảng khách hàng của chúng tôi, kết quả sau sẽ được hiển thị:

Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]

Bây giờ chúng ta cần cập nhật trường Địa chỉ bằng cách gán giá trị mới như dưới đây:

x.address = 'Banjara Hills Secunderabad'
session.commit()

Thay đổi sẽ được phản ánh liên tục trong cơ sở dữ liệu. Bây giờ chúng ta tìm nạp đối tượng tương ứng với hàng đầu tiên trong bảng bằng cách sử dụngfirst() method như sau -

x = session.query(Customers).first()

Điều này sẽ thực thi biểu thức SQL sau:

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 ?

Các tham số liên kết sẽ lần lượt là LIMIT = 1 và OFFSET = 0 có nghĩa là hàng đầu tiên sẽ được chọn.

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Bây giờ, đầu ra cho đoạn mã trên hiển thị hàng đầu tiên như sau:

Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]

Bây giờ hãy thay đổi thuộc tính tên và hiển thị nội dung bằng đoạn mã dưới đây -

x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Đầu ra của đoạn mã trên là -

Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]

Mặc dù thay đổi được hiển thị, nó không được cam kết. Bạn có thể giữ vị trí cố định trước đó bằng cách sử dụngrollback() method với mã bên dưới.

session.rollback()

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Nội dung gốc của bản ghi đầu tiên sẽ được hiển thị.

Đối với cập nhật hàng loạt, chúng tôi sẽ sử dụng phương thức update () của đối tượng Truy vấn. Hãy để chúng tôi thử và đưa ra một tiền tố, 'Mr.' để đặt tên trong mỗi hàng (trừ ID = 2). Câu lệnh update () tương ứng như sau:

session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)

The update() method requires two parameters as follows −

  • Một từ điển khóa-giá trị với khóa là thuộc tính cần cập nhật và giá trị là nội dung mới của thuộc tính.

  • thuộc tính syncnize_session đề cập đến chiến lược cập nhật các thuộc tính trong phiên. Các giá trị hợp lệ là false: vì không đồng bộ hóa phiên, tìm nạp: thực hiện truy vấn chọn trước khi cập nhật để tìm các đối tượng phù hợp với truy vấn cập nhật; và đánh giá: đánh giá các tiêu chí trên các đối tượng trong phiên.

Ba trong số 4 hàng trong bảng sẽ có tên bắt đầu bằng 'Mr.' Tuy nhiên, các thay đổi không được cam kết và do đó sẽ không được phản ánh trong chế độ xem bảng của SQLiteStudio. Nó sẽ chỉ được làm mới khi chúng tôi cam kết phiên.