Hướng dẫn dùng sqlalchemy join python
Tổng quan
[code]
[/code] Ở trong ví dụ này, chúng ta đã tạo ra trong memory một sqlite database với 2 bảng 'department' và 'employees'. Cột 'employee.department_id' là foreign key tới cột 'department.id' và quan hệ 'deparment.employees' bao gồm tăt cả những 'employees' trong một 'department'. Để kiểm tra việc setup, chúng ta đơn giản chèn vào một số record và truy vấn chúng sử dụng SQLAlchemy O R M : [code]
[/code] Bạn có thể nhìn thấy kết quả của việc chèn thêm 1 employee vào bảng employee vào 1 IT department. bây giờ chúng ta sẽ tạo ra một số câu truy vấn sử dụng expression language. [code]
[/code] Đây là một ví dụ về cấu trúc ở lower-level của Expression Language., nó có vẻ viết như câu SQL một cách thủ công, nhưng đây là con đường của Pythonic. Quan hệ nhiều nhiều (many-to-many) giữa departments và employeesTrong ví dụ trước, nó có vẻ đơn giản, một employee thuộc về duy nhất một department. Điều gì xảy ra nếu một employee có thể thuộc về nhiều departments? Sử dụng foreign Key là không đủ thể hiện mối quan hệ này . Tất nhiên, một foreign key là không đủ, ở model có quan hệ many-to-many, giữa deparment và employee. chúng ta có thể tạo ra quan hệ mới với 2 foreign key , 1 liên kết đến department.id , cái khác với employee.id [code]
[/code] ở ví dụ trên, chúng ta đã tạo ra mối quan hệ giữa các bảng sử dụng 2 foreign key. mối quan hệ tạo bảng 'department_employee'. có thể liên kết đến 'department' và 'employee'. mối quan hệ Department.employees và Employee.departments là mối qua hệ giữa các bảng với nhau. Một ma trận ảo xảy ra với tham số trung gian, chúng ta sẽ tạo ra hàm relationship() giữa Department và Employee ở các lớp model. Chúng ta có thể kiểm tra sự cài đặt của chúng ta dựa trên một số câu query sau: [code]
[/code] Giờ chúng ta sẽ chèn thêm một bản ghi employee vào 1 department vào database: [code]
[/code] Để tìm tất cả các employee trong IT department, chúng ta có thể viết như sau (sử dụng O R M): [code]
[/code] Hoặc sử dụng Expression Languge: [code]
[/code] Chúng ta tiếp tục gán cho một employee, vốn ở IT department vào một đối tượng pepartments khác [code]
[/code] Để thực hiện tìm mary ... hoặc các employees thuộc về ít nhất 2 department, chúng ta sử dụng group_by và having trong O R M query: [code]
[/code] Tương tự ở trong O R M query, chúng ta có thể sử dụng grouyp_by và having trong một Expression Language querery: [code]
[/code] Nhớ close session khi chúng ta làm xong các công việc : [code]
[/code] Tổng kết
|