Tại sao SQLite được sử dụng trong Python?
Tất cả các chương trình xử lý dữ liệu ở dạng này hay dạng khác và nhiều chương trình cần có khả năng lưu và truy xuất dữ liệu đó từ lần gọi này sang lần gọi tiếp theo. Python, SQLite và SQLAlchemy cung cấp chức năng cơ sở dữ liệu cho chương trình của bạn, cho phép bạn lưu trữ dữ liệu trong một tệp mà không cần máy chủ cơ sở dữ liệu Show
Bạn có thể đạt được kết quả tương tự bằng cách sử dụng các tệp phẳng ở bất kỳ định dạng nào, bao gồm CSV, JSON, XML và thậm chí cả các định dạng tùy chỉnh. Tệp phẳng thường là tệp văn bản mà con người có thể đọc được—mặc dù chúng cũng có thể là dữ liệu nhị phân—với cấu trúc có thể được phân tích cú pháp bằng chương trình máy tính. Dưới đây, bạn sẽ khám phá cách sử dụng cơ sở dữ liệu SQL và tệp phẳng để lưu trữ và thao tác dữ liệu, đồng thời tìm hiểu cách quyết định phương pháp nào phù hợp với chương trình của bạn Trong hướng dẫn này, bạn sẽ học cách sử dụng
Bạn có thể lấy tất cả mã và dữ liệu mà bạn sẽ thấy trong hướng dẫn này bằng cách nhấp vào liên kết bên dưới Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về quản lý dữ liệu với SQLite và SQLAlchemy trong hướng dẫn này Sử dụng tệp phẳng để lưu trữ dữ liệuTệp phẳng là tệp chứa dữ liệu không có cấu trúc phân cấp bên trong và thường không có tham chiếu đến tệp bên ngoài. Các tệp phẳng chứa các ký tự mà con người có thể đọc được và rất hữu ích để tạo và đọc dữ liệu. Bởi vì chúng không phải sử dụng độ rộng trường cố định, các tệp phẳng thường sử dụng các cấu trúc khác để chương trình có thể phân tích cú pháp văn bản Ví dụ: các tệp giá trị được phân tách bằng dấu phẩy (CSV) là các dòng văn bản thuần túy trong đó ký tự dấu phẩy phân tách các thành phần dữ liệu. Mỗi dòng văn bản đại diện cho một hàng dữ liệu và mỗi giá trị được phân tách bằng dấu phẩy là một trường trong hàng đó. Dấu phân cách ký tự dấu phẩy cho biết ranh giới giữa các giá trị dữ liệu Python vượt trội trong việc đọc và lưu vào tệp. Khả năng đọc tệp dữ liệu bằng Python cho phép bạn khôi phục ứng dụng về trạng thái hữu ích khi bạn chạy lại ứng dụng sau đó. Khả năng lưu dữ liệu trong một tệp cho phép bạn chia sẻ thông tin từ chương trình giữa người dùng và trang nơi ứng dụng chạy Trước khi một chương trình có thể đọc tệp dữ liệu, nó phải có khả năng hiểu dữ liệu. Thông thường, điều này có nghĩa là tệp dữ liệu cần phải có một số cấu trúc mà ứng dụng có thể sử dụng để đọc và phân tích cú pháp văn bản trong tệp Dưới đây là tệp CSV có tên 6, được sử dụng bởi chương trình ví dụ đầu tiên trong hướng dẫn này
Dòng đầu tiên cung cấp danh sách các trường được phân tách bằng dấu phẩy, là tên cột cho dữ liệu theo sau trong các dòng còn lại. Các dòng còn lại chứa dữ liệu, với mỗi dòng đại diện cho một bản ghi Ghi chú. Mặc dù tác giả, sách và nhà xuất bản đều có thật nhưng mối quan hệ giữa sách và nhà xuất bản là hư cấu và được tạo ra cho mục đích của hướng dẫn này Tiếp theo, bạn sẽ xem xét một số ưu điểm và nhược điểm của việc sử dụng các tệp phẳng như CSV ở trên để làm việc với dữ liệu của bạn Loại bỏ các quảng cáoƯu điểm của tệp phẳngLàm việc với dữ liệu trong tệp phẳng có thể quản lý và thực hiện dễ dàng. Có dữ liệu ở định dạng con người có thể đọc được không chỉ hữu ích cho việc tạo tệp dữ liệu bằng trình soạn thảo văn bản mà còn để kiểm tra dữ liệu và tìm kiếm bất kỳ sự không nhất quán hoặc vấn đề nào Nhiều ứng dụng có thể xuất các phiên bản tệp phẳng của dữ liệu do tệp tạo ra. Ví dụ: Excel có thể nhập hoặc xuất tệp CSV sang và từ bảng tính. Các tệp phẳng cũng có ưu điểm là độc lập và có thể chuyển nhượng nếu bạn muốn chia sẻ dữ liệu Hầu hết mọi ngôn ngữ lập trình đều có các công cụ và thư viện giúp làm việc với các tệp CSV dễ dàng hơn. Python có sẵn mô-đun 7 và mô-đun pandas mạnh mẽ, giúp làm việc với các tệp CSV trở thành một giải pháp hiệu quảNhược điểm của tệp phẳngƯu điểm của việc làm việc với các tệp phẳng bắt đầu giảm dần khi dữ liệu trở nên lớn hơn. Các tệp lớn vẫn có thể đọc được bằng con người nhưng việc chỉnh sửa chúng để tạo dữ liệu hoặc tìm kiếm sự cố trở thành một nhiệm vụ khó khăn hơn. Nếu ứng dụng của bạn sẽ thay đổi dữ liệu trong tệp, thì một giải pháp sẽ là đọc toàn bộ tệp vào bộ nhớ, thực hiện các thay đổi và ghi dữ liệu ra một tệp khác Một vấn đề khác khi sử dụng tệp phẳng là bạn sẽ cần tạo và duy trì rõ ràng bất kỳ mối quan hệ nào giữa các phần dữ liệu của bạn và chương trình ứng dụng trong cú pháp tệp. Ngoài ra, bạn sẽ cần tạo mã trong ứng dụng của mình để sử dụng các mối quan hệ đó Một điều phức tạp cuối cùng là những người bạn muốn chia sẻ tệp dữ liệu của mình cũng sẽ cần biết và hành động dựa trên các cấu trúc và mối quan hệ mà bạn đã tạo trong dữ liệu. Để truy cập thông tin, những người dùng đó không chỉ cần hiểu cấu trúc của dữ liệu mà còn cả các công cụ lập trình cần thiết để truy cập thông tin đó. Ví dụ tệp phẳngChương trình ví dụ 8 sử dụng tệp 6 để lấy dữ liệu và các mối quan hệ trong đó. Tệp CSV này duy trì danh sách tác giả, sách họ đã xuất bản và nhà xuất bản của từng sáchGhi chú. Các tệp dữ liệu được sử dụng trong các ví dụ có sẵn trong thư mục 0. Ngoài ra còn có một tệp chương trình trong thư mục 1 tạo dữ liệu. Ứng dụng đó rất hữu ích nếu bạn thay đổi dữ liệu và muốn quay lại trạng thái đã biếtĐể có quyền truy cập vào các tệp dữ liệu được sử dụng trong phần này và trong suốt hướng dẫn, hãy nhấp vào liên kết bên dưới Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về quản lý dữ liệu với SQLite và SQLAlchemy trong hướng dẫn này Tệp CSV trình bày ở trên là một tệp dữ liệu khá nhỏ chỉ chứa một số tác giả, sách và nhà xuất bản. Bạn cũng nên lưu ý một số điều về dữ liệu
Các trường dữ liệu trùng lặp này tạo ra mối quan hệ giữa các phần khác của dữ liệu. Một tác giả có thể viết nhiều sách và một nhà xuất bản có thể làm việc với nhiều tác giả. Tác giả và nhà xuất bản chia sẻ mối quan hệ với từng cuốn sách Các mối quan hệ trong tệp 6 được thể hiện bằng các trường xuất hiện nhiều lần trong các hàng khác nhau của tệp dữ liệu. Do sự dư thừa dữ liệu này, dữ liệu đại diện cho nhiều hơn một bảng hai chiều. Bạn sẽ thấy nhiều hơn về điều này khi bạn sử dụng tệp để tạo tệp cơ sở dữ liệu SQLiteChương trình ví dụ 8 sử dụng các mối quan hệ được nhúng trong tệp 6 để tạo một số dữ liệu. Đầu tiên nó trình bày một danh sách các tác giả và số lượng sách mà mỗi người đã viết. Sau đó, nó hiển thị danh sách các nhà xuất bản và số lượng tác giả mà mỗi người đã xuất bản sáchNó cũng sử dụng mô-đun 5 để hiển thị hệ thống phân cấp dạng cây của các tác giả, sách và nhà xuất bảnCuối cùng, nó thêm một cuốn sách mới vào dữ liệu và hiển thị lại cấu trúc phân cấp cây với cuốn sách mới tại chỗ. Đây là hàm đầu vào 6 cho chương trình này 2Mã Python ở trên thực hiện các bước sau
Chạy chương trình này tạo ra đầu ra sau 4Hệ thống phân cấp tác giả ở trên được trình bày hai lần trong đầu ra, với phần bổ sung The Stand của Stephen King, do Random House xuất bản. Đầu ra thực tế ở trên đã được chỉnh sửa và chỉ hiển thị đầu ra phân cấp đầu tiên để tiết kiệm dung lượng 6 gọi các chức năng khác để thực hiện phần lớn công việc. Hàm đầu tiên nó gọi là 9
Hàm này lấy đường dẫn tệp đến tệp CSV và sử dụng gấu trúc để đọc nó vào DataFrame của gấu trúc, sau đó nó sẽ trả lại cho người gọi. Giá trị trả về của hàm này trở thành cấu trúc dữ liệu được truyền cho các hàm khác tạo nên chương trình 80 tính số lượng sách được xuất bản bởi mỗi nhà xuất bản. Sê-ri gấu trúc kết quả sử dụng chức năng GroupBy của gấu trúc để nhóm theo nhà xuất bản và sau đó sắp xếp dựa trên cờ 81
82 về cơ bản giống như chức năng trước, nhưng đối với tác giả 8 83 tạo một cuốn sách mới trong DataFrame của gấu trúc. Mã này kiểm tra xem tác giả, cuốn sách hoặc nhà xuất bản đã tồn tại chưa. Nếu không, nó sẽ tạo một cuốn sách mới và nối nó vào DataFrame của gấu trúc 4 84 sử dụng các vòng lặp 85 lồng nhau để lặp qua các cấp của cấu trúc dữ liệu. Sau đó, nó sử dụng mô-đun 5 để xuất danh sách phân cấp các tác giả, sách họ đã xuất bản và nhà xuất bản đã xuất bản những cuốn sách đó 8Ứng dụng này hoạt động tốt và minh họa sức mạnh có sẵn cho bạn với mô-đun gấu trúc. Mô-đun cung cấp chức năng tuyệt vời để đọc tệp CSV và tương tác với dữ liệu Hãy tiếp tục và tạo một chương trình hoạt động giống hệt nhau bằng Python, phiên bản cơ sở dữ liệu SQLite của tác giả và dữ liệu xuất bản, và SQLAlchemy để tương tác với dữ liệu đó Loại bỏ các quảng cáoSử dụng SQLite để duy trì dữ liệuNhư bạn đã thấy trước đó, có dữ liệu dư thừa trong tệp 6. Ví dụ: tất cả thông tin về Trái đất tốt lành của Pearl Buck được liệt kê hai lần vì hai nhà xuất bản khác nhau đã xuất bản cuốn sáchHãy tưởng tượng nếu tệp dữ liệu này chứa nhiều dữ liệu liên quan hơn, chẳng hạn như địa chỉ và số điện thoại của tác giả, ngày xuất bản và ISBN cho sách hoặc địa chỉ, số điện thoại và có thể là doanh thu hàng năm của nhà xuất bản. Dữ liệu này sẽ được sao chép cho từng mục dữ liệu gốc, chẳng hạn như tác giả, sách hoặc nhà xuất bản Có thể tạo dữ liệu theo cách này, nhưng nó sẽ cực kỳ khó sử dụng. Hãy suy nghĩ về các vấn đề giữ cho tệp dữ liệu này hiện tại. Nếu Stephen King muốn đổi tên thì sao? Tồi tệ hơn việc sao chép dữ liệu sẽ là sự phức tạp của việc thêm các mối quan hệ khác vào dữ liệu. Điều gì sẽ xảy ra nếu bạn quyết định thêm số điện thoại của tác giả và họ có số điện thoại nhà riêng, cơ quan, điện thoại di động, v.v.? Vấn đề này là một lý do mà các mối quan hệ tồn tại trong hệ thống cơ sở dữ liệu. Một chủ đề quan trọng trong kỹ thuật cơ sở dữ liệu là chuẩn hóa cơ sở dữ liệu hoặc quá trình chia nhỏ dữ liệu để giảm dư thừa và tăng tính toàn vẹn. Khi một cấu trúc cơ sở dữ liệu được mở rộng với các loại dữ liệu mới, việc chuẩn hóa nó trước sẽ giữ cho các thay đổi đối với cấu trúc hiện có ở mức tối thiểu Cơ sở dữ liệu SQLite có sẵn bằng Python và theo trang chủ SQLite, nó được sử dụng nhiều hơn tất cả các hệ thống cơ sở dữ liệu khác cộng lại. Nó cung cấp một hệ thống quản lý cơ sở dữ liệu quan hệ đầy đủ tính năng (RDBMS) hoạt động với một tệp duy nhất để duy trì tất cả các chức năng của cơ sở dữ liệu Nó cũng có lợi thế là không yêu cầu một máy chủ cơ sở dữ liệu riêng biệt hoạt động. Định dạng tệp cơ sở dữ liệu là đa nền tảng và có thể truy cập được bằng bất kỳ ngôn ngữ lập trình nào hỗ trợ SQLite Tất cả điều này là thông tin thú vị, nhưng nó liên quan như thế nào đến việc sử dụng các tệp phẳng để lưu trữ dữ liệu? Tạo cấu trúc cơ sở dữ liệuCách tiếp cận mạnh mẽ để lấy dữ liệu 6 vào cơ sở dữ liệu SQLite sẽ là tạo một bảng duy nhất khớp với cấu trúc của tệp CSV. Làm điều này sẽ bỏ qua rất nhiều sức mạnh của SQLiteCơ sở dữ liệu quan hệ cung cấp cách lưu trữ dữ liệu có cấu trúc trong bảng và thiết lập mối quan hệ giữa các bảng đó. Họ thường sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL) làm cách chính để tương tác với dữ liệu. Đây là sự đơn giản hóa quá mức những gì RDBMS cung cấp, nhưng nó đủ cho mục đích của hướng dẫn này Cơ sở dữ liệu SQLite cung cấp hỗ trợ để tương tác với bảng dữ liệu bằng SQL. Tệp cơ sở dữ liệu SQLite không chỉ chứa dữ liệu mà còn có một cách tiêu chuẩn hóa để tương tác với dữ liệu. Hỗ trợ này được nhúng trong tệp, nghĩa là bất kỳ ngôn ngữ lập trình nào có thể sử dụng tệp SQLite cũng có thể sử dụng SQL để làm việc với nó Tương tác với cơ sở dữ liệu bằng SQLSQL là ngôn ngữ khai báo được sử dụng để tạo, quản lý và truy vấn dữ liệu có trong cơ sở dữ liệu. Một ngôn ngữ khai báo mô tả những gì sẽ được hoàn thành hơn là cách nó nên được hoàn thành. Bạn sẽ thấy các ví dụ về các câu lệnh SQL sau khi bạn bắt đầu tạo các bảng cơ sở dữ liệu Cấu trúc cơ sở dữ liệu với SQLĐể tận dụng sức mạnh của SQL, bạn sẽ cần áp dụng một số chuẩn hóa cơ sở dữ liệu cho dữ liệu trong tệp 6. Để làm điều này, bạn sẽ tách tác giả, sách và nhà xuất bản thành các bảng cơ sở dữ liệu riêng biệtVề mặt khái niệm, dữ liệu được lưu trữ trong cơ sở dữ liệu trong cấu trúc bảng hai chiều. Mỗi bảng bao gồm các hàng bản ghi và mỗi bản ghi bao gồm các cột hoặc trường chứa dữ liệu Dữ liệu chứa trong các trường thuộc các loại được xác định trước, bao gồm văn bản, số nguyên, số float, v.v. Tệp CSV khác vì tất cả các trường đều là văn bản và phải được chương trình phân tích cú pháp để gán loại dữ liệu cho chúng Mỗi bản ghi trong bảng có một khóa chính được xác định để cung cấp cho bản ghi một mã định danh duy nhất. Khóa chính tương tự như khóa trong từ điển Python. Bản thân công cụ cơ sở dữ liệu thường tạo khóa chính dưới dạng giá trị số nguyên tăng dần cho mọi bản ghi được chèn vào bảng cơ sở dữ liệu Mặc dù khóa chính thường được tạo tự động bởi công cụ cơ sở dữ liệu, nhưng nó không nhất thiết phải. Nếu dữ liệu được lưu trữ trong một trường là duy nhất trên tất cả các dữ liệu khác trong bảng trong trường đó, thì đó có thể là khóa chính. Ví dụ: bảng chứa dữ liệu về sách có thể sử dụng ISBN của sách làm khóa chính Loại bỏ các quảng cáoTạo bảng với SQLĐây là cách bạn có thể tạo ba bảng đại diện cho tác giả, sách và nhà xuất bản trong tệp CSV bằng câu lệnh SQL 2Lưu ý rằng không có thao tác tệp nào, không có biến nào được tạo và không có cấu trúc nào để giữ chúng. Các câu lệnh chỉ mô tả kết quả mong muốn. việc tạo một bảng với các thuộc tính cụ thể. Công cụ cơ sở dữ liệu xác định cách thực hiện việc này Khi bạn đã tạo và điền vào bảng này dữ liệu tác giả từ tệp 6, bạn có thể truy cập bảng này bằng các câu lệnh SQL. Câu lệnh sau (còn gọi là truy vấn) sử dụng ký tự đại diện ( 41) để lấy tất cả dữ liệu trong bảng 42 và xuất ra 6Bạn có thể sử dụng công cụ dòng lệnh 43 để tương tác với tệp cơ sở dữ liệu 44 trong thư mục 0 20Khi công cụ dòng lệnh SQLite đang chạy với cơ sở dữ liệu đang mở, bạn có thể nhập các lệnh SQL. Đây là lệnh SQL ở trên và đầu ra của nó, theo sau là lệnh 46 để thoát khỏi chương trình 21Lưu ý rằng mỗi tác giả chỉ tồn tại một lần trong bảng. Không giống như tệp CSV có nhiều mục cho một số tác giả, ở đây, chỉ cần một bản ghi duy nhất cho mỗi tác giả Duy trì cơ sở dữ liệu với SQLSQL cung cấp các cách để làm việc với cơ sở dữ liệu và bảng hiện có bằng cách chèn dữ liệu mới và cập nhật hoặc xóa dữ liệu hiện có. Đây là một câu lệnh SQL ví dụ để chèn một tác giả mới vào bảng 42 22Câu lệnh SQL này chèn các giá trị ‘ 48‘ và ‘ 49‘ vào các cột tương ứng 80 và 81 của bảng 42Lưu ý rằng cột 83 không được chỉ định. Bởi vì cột đó là khóa chính, công cụ cơ sở dữ liệu tạo ra giá trị và chèn nó như một phần của việc thực thi câu lệnhCập nhật bản ghi trong bảng cơ sở dữ liệu là một quá trình không phức tạp. Chẳng hạn, giả sử Stephen King muốn được biết đến với bút danh Richard Bachman. Đây là câu lệnh SQL để cập nhật bản ghi cơ sở dữ liệu 23Câu lệnh SQL định vị bản ghi đơn cho 84 bằng cách sử dụng câu lệnh điều kiện 85, sau đó cập nhật các trường 80 và 81 với các giá trị mới. SQL sử dụng dấu bằng ( 88) vừa là toán tử so sánh vừa là toán tử gánBạn cũng có thể xóa bản ghi khỏi cơ sở dữ liệu. Đây là một câu lệnh SQL ví dụ để xóa một bản ghi khỏi bảng 42 24Câu lệnh SQL này xóa một hàng khỏi bảng 42 trong đó 80 bằng với 22 và 81 bằng với 24Cẩn thận khi xóa hồ sơ. Các điều kiện bạn đặt phải càng cụ thể càng tốt. Một điều kiện quá rộng có thể dẫn đến việc xóa nhiều bản ghi hơn bạn dự định. Ví dụ: nếu điều kiện chỉ dựa trên dòng 25, thì tất cả các tác giả có tên là Paul sẽ bị xóa khỏi cơ sở dữ liệuGhi chú. Để tránh vô tình xóa bản ghi, nhiều ứng dụng hoàn toàn không cho phép xóa. Thay vào đó, bản ghi có một cột khác để cho biết liệu nó có đang được sử dụng hay không. Cột này có thể được đặt tên là 26 và chứa một giá trị đánh giá là Đúng hoặc Sai, cho biết liệu bản ghi có nên được đưa vào khi truy vấn cơ sở dữ liệu hay khôngVí dụ: truy vấn SQL bên dưới sẽ lấy tất cả các cột cho tất cả các bản ghi đang hoạt động trong 27 25SQLite không có kiểu dữ liệu Boolean, vì vậy cột 26 được biểu thị bằng một số nguyên có giá trị 29 hoặc 60 để biểu thị trạng thái của bản ghi. Các hệ thống cơ sở dữ liệu khác có thể có hoặc không có kiểu dữ liệu Boolean gốcHoàn toàn có thể xây dựng các ứng dụng cơ sở dữ liệu bằng Python bằng cách sử dụng các câu lệnh SQL trực tiếp trong mã. Làm như vậy sẽ trả về dữ liệu cho ứng dụng dưới dạng danh sách danh sách hoặc danh sách từ điển Sử dụng SQL thô là một cách hoàn toàn có thể chấp nhận được để làm việc với dữ liệu do truy vấn cơ sở dữ liệu trả về. Tuy nhiên, thay vì làm điều đó, bạn sẽ chuyển thẳng sang sử dụng SQLAlchemy để làm việc với cơ sở dữ liệu Loại bỏ các quảng cáoXây dựng các mối quan hệMột tính năng khác của hệ thống cơ sở dữ liệu mà bạn có thể thấy thậm chí còn mạnh mẽ và hữu ích hơn tính bền vững và truy xuất dữ liệu là các mối quan hệ. Cơ sở dữ liệu hỗ trợ các mối quan hệ cho phép bạn chia nhỏ dữ liệu thành nhiều bảng và thiết lập kết nối giữa chúng Dữ liệu trong tệp 6 thể hiện dữ liệu và mối quan hệ bằng cách sao chép dữ liệu. Cơ sở dữ liệu xử lý việc này bằng cách chia nhỏ dữ liệu thành ba bảng— 42, 63 và 64—và thiết lập mối quan hệ giữa chúngSau khi thu thập tất cả dữ liệu bạn muốn vào một nơi trong tệp CSV, tại sao bạn lại muốn chia dữ liệu đó thành nhiều bảng? Mối quan hệ một-nhiềuMối quan hệ một-nhiều giống như mối quan hệ của một khách hàng đặt hàng trực tuyến. Một khách hàng có thể có nhiều đơn hàng, nhưng mỗi đơn hàng thuộc về một khách hàng. Cơ sở dữ liệu 44 có mối quan hệ một-nhiều dưới dạng tác giả và sách. Mỗi tác giả có thể viết nhiều sách, nhưng mỗi sách do một tác giả viếtNhư bạn đã thấy trong phần tạo bảng ở trên, việc triển khai các thực thể riêng biệt này là đặt từng thực thể vào một bảng cơ sở dữ liệu, một dành cho tác giả và một dành cho sách. Nhưng làm cách nào để thực hiện mối quan hệ một-nhiều giữa hai bảng này? Hãy nhớ rằng, mỗi bảng trong cơ sở dữ liệu có một trường được chỉ định làm khóa chính cho bảng đó. Mỗi bảng ở trên có một trường khóa chính được đặt tên bằng mẫu này. 66Bảng 63 hiển thị ở trên chứa một trường, 83, tham chiếu đến bảng 42. Trường 83 thiết lập mối quan hệ một-nhiều giữa tác giả và sách giống như thế nàySơ đồ trên là một sơ đồ mối quan hệ thực thể (ERD) đơn giản được tạo bằng ứng dụng JetBrains DataGrip hiển thị các bảng 42 và 63 dưới dạng các hộp có khóa chính và trường dữ liệu tương ứng của chúng. Hai mục đồ họa thêm thông tin về mối quan hệ
Khi bạn thêm một cuốn sách mới vào bảng 63, dữ liệu bao gồm giá trị 83 cho tác giả hiện có trong bảng 42. Bằng cách này, tất cả các cuốn sách được viết bởi một tác giả đều có mối quan hệ tra cứu về tác giả duy nhất đóBây giờ bạn có các bảng riêng biệt cho tác giả và sách, làm thế nào để bạn sử dụng mối quan hệ giữa chúng? Truy vấn SQL bên dưới kết hợp bảng 42 và 63 bằng ứng dụng dòng lệnh SQLite 26Truy vấn SQL ở trên thu thập thông tin từ cả bảng tác giả và sách bằng cách nối các bảng bằng mối quan hệ được thiết lập giữa hai bảng. Nối chuỗi SQL gán tên đầy đủ của tác giả cho bí danh 213. Dữ liệu được thu thập bởi truy vấn được sắp xếp theo thứ tự tăng dần theo trường 81Có một vài điều cần chú ý trong câu lệnh SQL. Đầu tiên, các tác giả được trình bày theo tên đầy đủ của họ trong một cột duy nhất và được sắp xếp theo họ của họ. Ngoài ra, các tác giả xuất hiện trong đầu ra nhiều lần do mối quan hệ một-nhiều. Tên của tác giả được sao chép cho mỗi cuốn sách họ đã viết trong cơ sở dữ liệu Bằng cách tạo các bảng riêng cho tác giả và sách, đồng thời thiết lập mối quan hệ giữa chúng, bạn đã giảm được sự dư thừa trong dữ liệu. Giờ đây, bạn chỉ phải chỉnh sửa dữ liệu của tác giả ở một nơi và thay đổi đó sẽ xuất hiện trong mọi truy vấn SQL truy cập dữ liệu Mối quan hệ nhiều-nhiềuMối quan hệ nhiều-nhiều tồn tại trong cơ sở dữ liệu 44 giữa tác giả và nhà xuất bản cũng như giữa sách và nhà xuất bản. Một tác giả có thể làm việc với nhiều nhà xuất bản và một nhà xuất bản có thể làm việc với nhiều tác giả. Tương tự, một cuốn sách có thể được xuất bản bởi nhiều nhà xuất bản và một nhà xuất bản có thể xuất bản nhiều cuốn sáchXử lý tình huống này trong cơ sở dữ liệu liên quan nhiều hơn mối quan hệ một-nhiều vì mối quan hệ có cả hai chiều. Mối quan hệ nhiều-nhiều được tạo bởi một bảng kết hợp đóng vai trò là cầu nối giữa hai bảng có liên quan Bảng liên kết chứa ít nhất hai trường khóa ngoại, là khóa chính của mỗi trong hai bảng được liên kết. Câu lệnh SQL này tạo bảng liên kết liên quan đến bảng 42 và 64 27Các câu lệnh SQL tạo một bảng 218 mới tham chiếu các khóa chính của các bảng 42 và 64 hiện có. Bảng 218 là bảng liên kết thiết lập mối quan hệ giữa tác giả và nhà xuất bảnVì mối quan hệ là giữa hai khóa chính nên không cần tạo khóa chính cho chính bảng liên kết. Sự kết hợp của hai khóa liên quan sẽ tạo ra một mã định danh duy nhất cho một hàng dữ liệu Như trước đây, bạn sử dụng từ khóa 210 để kết nối hai bảng với nhau. Kết nối bảng 42 với bảng 64 là quy trình gồm hai bước
Bảng liên kết 218 cung cấp cầu nối qua đó 210 kết nối hai bảng. Đây là một truy vấn SQL ví dụ trả về danh sách các tác giả và nhà xuất bản xuất bản sách của họ 28Các câu lệnh trên thực hiện các hành động sau
Lưu ý rằng dữ liệu trong các bảng nguồn 42 và 64 được chuẩn hóa, không có dữ liệu trùng lặp. Tuy nhiên, kết quả trả về có dữ liệu trùng lặp khi cần thiết để trả lời truy vấn SQLTruy vấn SQL ở trên trình bày cách sử dụng mối quan hệ bằng cách sử dụng từ khóa SQL 210, nhưng dữ liệu kết quả là sự tạo lại một phần của dữ liệu CSV 6. Lợi ích của việc hoàn thành công việc tạo cơ sở dữ liệu để phân tách dữ liệu là gì?Đây là một truy vấn SQL khác để thể hiện một chút sức mạnh của SQL và công cụ cơ sở dữ liệu 29Truy vấn SQL ở trên trả về danh sách tác giả và số lượng sách họ đã viết. Danh sách được sắp xếp đầu tiên theo số lượng sách giảm dần, sau đó theo tên tác giả theo thứ tự bảng chữ cái
Trong ví dụ trên, bạn tận dụng SQL để thực hiện tính toán tổng hợp và sắp xếp kết quả theo thứ tự hữu ích. Để cơ sở dữ liệu thực hiện các phép tính dựa trên khả năng tổ chức dữ liệu tích hợp của nó thường nhanh hơn so với việc thực hiện các loại phép tính tương tự trên các tập dữ liệu thô trong Python. SQL cung cấp những lợi thế của việc sử dụng lý thuyết tập hợp được nhúng trong cơ sở dữ liệu RDBMS Loại bỏ các quảng cáoSơ đồ mối quan hệ thực thểSơ đồ mối quan hệ thực thể (ERD) là một mô tả trực quan về mô hình mối quan hệ thực thể cho cơ sở dữ liệu hoặc một phần của cơ sở dữ liệu. Cơ sở dữ liệu SQLite 44 đủ nhỏ để toàn bộ cơ sở dữ liệu có thể được hiển thị bằng sơ đồ hiển thị bên dướiSơ đồ này trình bày các cấu trúc bảng trong cơ sở dữ liệu và các mối quan hệ giữa chúng. Mỗi hộp đại diện cho một bảng và chứa các trường được xác định trong bảng, với khóa chính được chỉ định trước nếu nó tồn tại Các mũi tên hiển thị mối quan hệ giữa các bảng kết nối một trường khóa ngoại trong một bảng với một trường, thường là khóa chính, trong một bảng khác. Bảng 273 có hai mũi tên, một mũi tên kết nối nó với bảng 63 và một mũi tên khác kết nối nó với bảng 64. Mũi tên biểu thị mối quan hệ nhiều-nhiều giữa các bảng 63 và 64. Bảng 218 cung cấp mối quan hệ tương tự giữa 42 và 64Làm việc với các đối tượng SQLAlchemy và PythonSQLAlchemy là bộ công cụ truy cập cơ sở dữ liệu mạnh mẽ dành cho Python, với trình ánh xạ quan hệ đối tượng (ORM) là một trong những thành phần nổi tiếng nhất của nó và là thành phần được thảo luận và sử dụng tại đây Khi bạn đang làm việc với một ngôn ngữ hướng đối tượng như Python, sẽ rất hữu ích khi nghĩ về các đối tượng. Có thể ánh xạ các kết quả được trả về bởi các truy vấn SQL tới các đối tượng, nhưng làm như vậy sẽ đi ngược lại bản chất của cách thức hoạt động của cơ sở dữ liệu. Gắn bó với các kết quả vô hướng do SQL cung cấp hoạt động ngược lại với cách các nhà phát triển Python làm việc. Vấn đề này được gọi là trở kháng quan hệ đối tượng không phù hợp ORM do SQLAlchemy cung cấp nằm giữa cơ sở dữ liệu SQLite và chương trình Python của bạn và biến đổi luồng dữ liệu giữa công cụ cơ sở dữ liệu và các đối tượng Python. SQLAlchemy cho phép bạn suy nghĩ về các đối tượng và vẫn giữ được các tính năng mạnh mẽ của một công cụ cơ sở dữ liệu Ngươi mâuMột trong những yếu tố cơ bản để cho phép kết nối SQLAlchemy với cơ sở dữ liệu là tạo một mô hình. Mô hình là một lớp Python xác định ánh xạ dữ liệu giữa các đối tượng Python được trả về do truy vấn cơ sở dữ liệu và các bảng cơ sở dữ liệu bên dưới Sơ đồ mối quan hệ thực thể được hiển thị trước đó hiển thị các hộp được kết nối với các mũi tên. Các hộp là các bảng được tạo bằng các lệnh SQL và là thứ mà các lớp Python sẽ mô hình hóa. Các mũi tên là mối quan hệ giữa các bảng Các mô hình là các lớp Python kế thừa từ một lớp SQLAlchemy 281. Lớp 281 cung cấp các hoạt động giao diện giữa các thể hiện của mô hình và bảng cơ sở dữ liệuDưới đây là tệp 283 tạo các mô hình để biểu diễn cơ sở dữ liệu 44 40Đây là những gì đang diễn ra trong mô-đun này
Mô tả ở trên cho thấy ánh xạ của năm bảng trong cơ sở dữ liệu 44. Nhưng nó che đậy một số tính năng SQLAlchemy ORM, bao gồm 289, 288, 290 và 291. Bây giờ chúng ta hãy đi vào những điều đófirst_name,last_name,title,publisher Isaac,Asimov,Foundation,Random House Pearl,Buck,The Good Earth,Random House Pearl,Buck,The Good Earth,Simon & Schuster Tom,Clancy,The Hunt For Red October,Berkley Tom,Clancy,Patriot Games,Simon & Schuster Stephen,King,It,Random House Stephen,King,It,Penguin Random House Stephen,King,Dead Zone,Random House Stephen,King,The Shining,Penguin Random House John,Le Carre,"Tinker, Tailor, Soldier, Spy: A George Smiley Novel",Berkley Alex,Michaelides,The Silent Patient,Simon & Schuster Carol,Shaben,Into The Abyss,Simon & Schuster 289 Tạo liên kết 218 và 273 đều là các phiên bản của lớp 289 tạo ra các bảng liên kết nhiều-nhiều được sử dụng giữa các bảng 42 và 64 và các bảng 63 và 64 tương ứngLớp SQLAlchemy 289 tạo một thể hiện duy nhất của bảng được ánh xạ ORM trong cơ sở dữ liệu. Tham số đầu tiên là tên bảng như được xác định trong cơ sở dữ liệu và tham số thứ hai là 416, cung cấp kết nối giữa chức năng SQLAlchemy và công cụ cơ sở dữ liệuPhần còn lại của các tham số là các phiên bản của lớp 285 xác định các trường bảng theo tên, loại của chúng và trong ví dụ trên, một phiên bản của 288Loại bỏ các quảng cáofirst_name,last_name,title,publisher Isaac,Asimov,Foundation,Random House Pearl,Buck,The Good Earth,Random House Pearl,Buck,The Good Earth,Simon & Schuster Tom,Clancy,The Hunt For Red October,Berkley Tom,Clancy,Patriot Games,Simon & Schuster Stephen,King,It,Random House Stephen,King,It,Penguin Random House Stephen,King,Dead Zone,Random House Stephen,King,The Shining,Penguin Random House John,Le Carre,"Tinker, Tailor, Soldier, Spy: A George Smiley Novel",Berkley Alex,Michaelides,The Silent Patient,Simon & Schuster Carol,Shaben,Into The Abyss,Simon & Schuster 288 Tạo kết nốiLớp SQLAlchemy 288 xác định sự phụ thuộc giữa hai trường 285 trong các bảng khác nhau. Một 288 là cách bạn làm cho SQLAlchemy nhận biết được mối quan hệ giữa các bảng. Ví dụ: dòng này từ quá trình tạo cá thể 218 thiết lập mối quan hệ khóa ngoại 41Câu lệnh trên cho SQLAlchemy biết rằng có một cột trong bảng 218 có tên là 83. Loại cột đó là 286 và 83 là khóa ngoại liên quan đến khóa chính trong bảng 42Có cả 83 và 430 được xác định trong trường hợp 218 289 sẽ tạo kết nối từ bảng 42 đến bảng 64 và ngược lại, thiết lập mối quan hệ nhiều-nhiềufirst_name,last_name,title,publisher Isaac,Asimov,Foundation,Random House Pearl,Buck,The Good Earth,Random House Pearl,Buck,The Good Earth,Simon & Schuster Tom,Clancy,The Hunt For Red October,Berkley Tom,Clancy,Patriot Games,Simon & Schuster Stephen,King,It,Random House Stephen,King,It,Penguin Random House Stephen,King,Dead Zone,Random House Stephen,King,The Shining,Penguin Random House John,Le Carre,"Tinker, Tailor, Soldier, Spy: A George Smiley Novel",Berkley Alex,Michaelides,The Silent Patient,Simon & Schuster Carol,Shaben,Into The Abyss,Simon & Schuster 290 Thành lập Bộ sưu tậpCó một 288 xác định sự tồn tại của mối quan hệ giữa các bảng nhưng không phải là bộ sưu tập sách mà một tác giả có thể có. Hãy xem dòng này trong định nghĩa lớp 296 42Đoạn mã trên định nghĩa một bộ sưu tập cha-con. Thuộc tính 438 ở dạng số nhiều (không phải là một yêu cầu, chỉ là một quy ước) là một dấu hiệu cho thấy đó là một bộ sưu tậpTham số đầu tiên của 290, tên lớp 298 (không phải là tên bảng 63), là lớp mà thuộc tính 438 có liên quan. 443 thông báo cho SQLAlchemy rằng có một mối quan hệ giữa các lớp 296 và 298. SQLAlchemy sẽ tìm mối quan hệ trong định nghĩa lớp 298 43SQLAlchemy nhận ra rằng đây là điểm kết nối 288 giữa hai lớp. Bạn sẽ nhận được tham số 291 trong 290 trong giây látMối quan hệ khác trong 296 là với lớp 400. Điều này được tạo bằng câu lệnh sau trong định nghĩa lớp 296 44Giống như 438, thuộc tính 454 chỉ ra một tập hợp các nhà xuất bản được liên kết với một tác giả. Tham số đầu tiên, 455, thông báo cho SQLAlchemy lớp liên quan là gì. Tham số thứ hai và thứ ba là 456 và 457
first_name,last_name,title,publisher Isaac,Asimov,Foundation,Random House Pearl,Buck,The Good Earth,Random House Pearl,Buck,The Good Earth,Simon & Schuster Tom,Clancy,The Hunt For Red October,Berkley Tom,Clancy,Patriot Games,Simon & Schuster Stephen,King,It,Random House Stephen,King,It,Penguin Random House Stephen,King,Dead Zone,Random House Stephen,King,The Shining,Penguin Random House John,Le Carre,"Tinker, Tailor, Soldier, Spy: A George Smiley Novel",Berkley Alex,Michaelides,The Silent Patient,Simon & Schuster Carol,Shaben,Into The Abyss,Simon & Schuster 291 Thuộc tính gươngTham số 291 của bộ sưu tập 438 290 tạo thuộc tính 42 cho mỗi phiên bản 298. Thuộc tính này đề cập đến cha mẹ 296 mà phiên bản 298 có liên quan đếnVí dụ: nếu bạn thực thi đoạn mã Python sau, thì một phiên bản 298 sẽ được trả về từ truy vấn SQLAlchemy. Phiên bản 298 có các thuộc tính có thể được sử dụng để in ra thông tin về cuốn sách 45Sự tồn tại của thuộc tính 42 trong 298 ở trên là do định nghĩa của 291. Một 291 có thể rất hữu ích khi bạn cần tham chiếu đến cha mẹ và tất cả những gì bạn có là một phiên bản conLoại bỏ các quảng cáoCâu hỏi Trả lời câu hỏiBạn có thể tạo một truy vấn cơ bản như 483 trong SQLAlchemy như thế này 46 484 là một đối tượng SQLAlchemy được sử dụng để giao tiếp với SQLite trong các chương trình mẫu Python. Tại đây, bạn nói với phiên bạn muốn thực hiện truy vấn đối với mô hình 296 và trả về tất cả các bản ghiTại thời điểm này, những lợi thế của việc sử dụng SQLAlchemy thay vì SQL thuần túy có thể không rõ ràng, đặc biệt khi xem xét thiết lập cần thiết để tạo các mô hình đại diện cho cơ sở dữ liệu. 486 được trả về bởi truy vấn là nơi điều kỳ diệu xảy ra. Thay vì nhận lại danh sách danh sách dữ liệu vô hướng, bạn sẽ nhận lại danh sách các phiên bản của đối tượng 296 có thuộc tính khớp với tên cột bạn đã xác địnhCác bộ sưu tập 438 và 454 do SQLAlchemy duy trì tạo ra một danh sách phân cấp các tác giả và những cuốn sách họ đã viết cũng như các nhà xuất bản đã xuất bản chúngĐằng sau hậu trường, SQLAlchemy biến các cuộc gọi đối tượng và phương thức thành các câu lệnh SQL để thực thi đối với công cụ cơ sở dữ liệu SQLite. SQLAlchemy biến đổi dữ liệu được trả về bởi các truy vấn SQL thành các đối tượng Python Với SQLAlchemy, bạn có thể thực hiện truy vấn tổng hợp phức tạp hơn được hiển thị trước đó cho danh sách tác giả và số lượng sách họ đã viết như thế này 47Truy vấn trên nhận được họ và tên của tác giả, cùng với số lượng sách mà tác giả đã viết. Tổng hợp 490 được sử dụng bởi mệnh đề 491 dựa trên họ của tác giả. Cuối cùng, các kết quả được sắp xếp theo thứ tự giảm dần dựa trên tổng hợp và bí danh 492Chương trình ví dụChương trình ví dụ 493 có cùng chức năng như 8 nhưng chỉ sử dụng SQLAlchemy để giao tiếp với cơ sở dữ liệu SQLite của 44. Chương trình được chia thành hàm 6 và các hàm mà nó gọi 48Chương trình này là phiên bản sửa đổi của 8. Hãy vượt qua sự khác biệt
Phần còn lại của hàm tương tự, ngoại trừ việc thay thế 05 bằng 484 làm tham số đầu tiên cho tất cả các hàm được gọi bởi 6 80 đã được tái cấu trúc để sử dụng SQLAlchemy và các mô hình bạn đã xác định trước đó để nhận dữ liệu được yêu cầu 49Đây là chức năng mới, 09, đang làm
Tất cả các đoạn mã trên thể hiện những gì được mong muốn hơn là cách nó được truy xuất. Bây giờ thay vì sử dụng SQL để mô tả những gì bạn muốn, bạn đang sử dụng các đối tượng và phương thức Python. Những gì được trả về là một danh sách các đối tượng Python thay vì một danh sách các bộ dữ liệu 82 cũng đã được sửa đổi để hoạt động độc quyền với SQLAlchemy. Chức năng của nó rất giống với chức năng trước đó, vì vậy phần mô tả chức năng bị bỏ qua 0 22 đã được thêm vào để có danh sách các tác giả được sắp xếp theo họ của họ. Kết quả của truy vấn này là một danh sách các đối tượng 296 chứa một bộ sách. Các đối tượng 296 đã chứa dữ liệu phân cấp nên không cần phải định dạng lại kết quả 1Giống như phiên bản trước, 83 tương đối phức tạp nhưng dễ hiểu. Nó xác định xem một cuốn sách có cùng tiêu đề, tác giả và nhà xuất bản đã tồn tại trong cơ sở dữ liệu chưaNếu truy vấn tìm kiếm tìm thấy kết quả khớp chính xác, thì hàm sẽ trả về. Nếu không có cuốn sách nào phù hợp với tiêu chí tìm kiếm chính xác, thì nó sẽ tìm kiếm xem liệu tác giả đã viết một cuốn sách bằng cách sử dụng tiêu đề đã nhập chưa. Mã này tồn tại để ngăn các sách trùng lặp được tạo trong cơ sở dữ liệu Nếu không có cuốn sách phù hợp nào tồn tại và tác giả chưa viết cuốn sách nào có cùng tiêu đề thì một cuốn sách mới sẽ được tạo. Sau đó, chức năng truy xuất hoặc tạo tác giả và nhà xuất bản. Khi các phiên bản của 298, 296 và 400 tồn tại, mối quan hệ giữa chúng được tạo và thông tin kết quả được lưu vào cơ sở dữ liệu 2Đoạn mã trên tương đối dài. Hãy chia chức năng thành các phần có thể quản lý được
Có một vài điều cần lưu ý ở đây. Đầu tiên, không có đề cập đến bảng liên kết 218 hoặc 273 trong truy vấn hoặc tạo và cập nhật. Do công việc bạn đã làm trong 283 khi thiết lập các mối quan hệ, SQLAlchemy có thể xử lý việc kết nối các đối tượng với nhau và giữ các bảng đó đồng bộ trong quá trình tạo và cập nhậtThứ hai, tất cả các sáng tạo và cập nhật xảy ra trong ngữ cảnh của đối tượng 484. Không có hoạt động nào chạm vào cơ sở dữ liệu. Chỉ khi câu lệnh 52 thực thi thì phiên đó mới đi qua đơn vị công việc của nó và cam kết công việc đó với cơ sở dữ liệuVí dụ: nếu một phiên bản 298 mới được tạo (như trong dòng 37 ở trên), thì cuốn sách có các thuộc tính được khởi tạo ngoại trừ khóa chính 54 và khóa ngoại 83. Bởi vì chưa có hoạt động cơ sở dữ liệu nào xảy ra, nên 54 không xác định và không có gì được thực hiện trong quá trình khởi tạo của 63 để cung cấp cho nó một 83Khi 52 được thực thi, một trong những việc nó sẽ làm là chèn 63 vào cơ sở dữ liệu, lúc này cơ sở dữ liệu sẽ tạo khóa chính 54. Sau đó, phiên sẽ khởi tạo giá trị 62 với giá trị khóa chính được tạo bởi công cụ cơ sở dữ liệu 52 cũng biết về việc chèn phiên bản 298 vào bộ sưu tập 65. Khóa chính 83 của đối tượng 42 sẽ được thêm vào đối tượng 298 được thêm vào bộ sưu tập 65 dưới dạng khóa ngoại 83Loại bỏ các quảng cáoCung cấp quyền truy cập cho nhiều người dùngĐến thời điểm này, bạn đã biết cách sử dụng pandas, SQLite và SQLAlchemy để truy cập cùng một dữ liệu theo nhiều cách khác nhau. Đối với trường hợp sử dụng tương đối đơn giản của dữ liệu tác giả, sách và nhà xuất bản, việc bạn có nên sử dụng cơ sở dữ liệu hay không vẫn có thể là một vấn đề khó khăn. Một yếu tố quyết định khi lựa chọn giữa việc sử dụng tệp phẳng hoặc cơ sở dữ liệu là độ phức tạp của dữ liệu và mối quan hệ. Nếu dữ liệu cho mỗi thực thể phức tạp và chứa nhiều mối quan hệ giữa các thực thể thì việc tạo và duy trì dữ liệu đó trong một tệp phẳng có thể trở nên khó khăn hơn Một yếu tố khác cần xem xét là liệu bạn có muốn chia sẻ dữ liệu giữa nhiều người dùng hay không. Giải pháp cho vấn đề này có thể đơn giản như sử dụng sneakernet để di chuyển dữ liệu vật lý giữa những người dùng. Di chuyển tệp dữ liệu theo cách này có ưu điểm là dễ sử dụng, nhưng dữ liệu có thể nhanh chóng không đồng bộ khi thực hiện thay đổi Vấn đề giữ dữ liệu nhất quán cho tất cả người dùng càng trở nên khó khăn hơn nếu người dùng ở xa và muốn truy cập dữ liệu qua các mạng. Ngay cả khi bạn bị giới hạn ở một ngôn ngữ duy nhất như Python và sử dụng gấu trúc để truy cập dữ liệu, khóa tệp mạng không đủ để đảm bảo dữ liệu không bị hỏng Cung cấp dữ liệu thông qua ứng dụng máy chủ và giao diện người dùng giúp giảm bớt vấn đề này. Máy chủ là ứng dụng duy nhất cần quyền truy cập cấp tệp vào cơ sở dữ liệu. Bằng cách sử dụng cơ sở dữ liệu, máy chủ có thể tận dụng SQL để truy cập dữ liệu bằng giao diện nhất quán cho dù máy chủ sử dụng ngôn ngữ lập trình nào Chương trình ví dụ cuối cùng chứng minh điều này bằng cách cung cấp một ứng dụng web và giao diện người dùng cho cơ sở dữ liệu SQLite mẫu Chinook. Peter Stark hào phóng duy trì cơ sở dữ liệu Chinook như một phần của trang Hướng dẫn SQLite. Nếu bạn muốn tìm hiểu thêm về SQLite và SQL nói chung, thì trang web này là một nguồn tài nguyên tuyệt vời Cơ sở dữ liệu Chinook cung cấp thông tin về nghệ sĩ, âm nhạc và danh sách phát dọc theo dòng của một Spotify đơn giản hóa. Cơ sở dữ liệu là một phần của dự án mã ví dụ trong thư mục 0Sử dụng Flask với Python, SQLite và SQLAlchemyChương trình 72 tạo ứng dụng Flask mà bạn có thể tương tác bằng trình duyệt. Ứng dụng này sử dụng các công nghệ sau
Mặc dù không cần thiết cho ví dụ này, tệp 73 chứa các biến môi trường cho ứng dụng. Tệp 73 tồn tại để chứa thông tin nhạy cảm như mật khẩu mà bạn nên tránh xa các tệp mã của mình. Tuy nhiên, nội dung của tệp dự án 73 được hiển thị bên dưới vì nó không chứa bất kỳ dữ liệu nhạy cảm nào 3Ứng dụng ví dụ khá lớn và chỉ một số ứng dụng có liên quan đến hướng dẫn này. Vì lý do này, việc kiểm tra và học hỏi từ mã được để lại như một bài tập cho người đọc. Điều đó nói rằng, bạn có thể xem ảnh chụp màn hình động của ứng dụng bên dưới, theo sau là HTML hiển thị trang chủ và tuyến Python Flask cung cấp dữ liệu động Đây là ứng dụng đang hoạt động, điều hướng qua các menu và tính năng khác nhau Chụp màn hình động bắt đầu trên trang chủ của ứng dụng, được tạo kiểu bằng Bootstrap 4. Trang hiển thị các nghệ sĩ trong cơ sở dữ liệu, được sắp xếp theo thứ tự tăng dần. Phần còn lại của ảnh chụp màn hình trình bày kết quả của việc nhấp vào các liên kết được hiển thị hoặc điều hướng xung quanh ứng dụng từ menu cấp cao nhất Đây là mẫu HTML Jinja2 tạo trang chủ của ứng dụng 4Đây là những gì đang diễn ra trong mã mẫu Jinja2 này
Đây là lộ trình Python hiển thị trang 5Hãy xem đoạn mã trên đang làm gì
Bạn có thể thấy rằng rất nhiều chức năng được tạo ra bởi một lượng mã khá nhỏ Loại bỏ các quảng cáoTạo một máy chủ API RESTBạn cũng có thể tạo một máy chủ web cung cấp API REST. Loại máy chủ này cung cấp các điểm cuối URL phản hồi dữ liệu, thường ở định dạng JSON. Một máy chủ cung cấp các điểm cuối API REST có thể được sử dụng bởi các ứng dụng web một trang JavaScript thông qua việc sử dụng các yêu cầu AJAX HTTP Flask là một công cụ tuyệt vời để tạo các ứng dụng REST. Đối với loạt bài hướng dẫn gồm nhiều phần về cách sử dụng Flask, Connexion và SQLAlchemy để tạo các ứng dụng REST, hãy xem API REST của Python với Flask, Connexion và SQLAlchemy Nếu bạn là người hâm mộ Django và quan tâm đến việc tạo API REST, thì hãy xem Django Rest Framework – Giới thiệu và tạo API REST siêu cơ bản với Django Tastypie Ghi chú. Thật hợp lý khi hỏi liệu SQLite có phải là lựa chọn phù hợp làm cơ sở dữ liệu phụ trợ cho ứng dụng web hay không. Trang web SQLite tuyên bố rằng SQLite là một lựa chọn tốt cho các trang web phục vụ khoảng 100.000 lượt truy cập mỗi ngày. Nếu trang web của bạn nhận được nhiều lượt truy cập hàng ngày hơn, điều đầu tiên phải nói là xin chúc mừng Ngoài ra, nếu bạn đã triển khai trang web của mình bằng SQLAlchemy, thì có thể di chuyển dữ liệu từ SQLite sang cơ sở dữ liệu khác như MySQL hoặc PostgreSQL. Để so sánh SQLite, MySQL và PostgreSQL sẽ giúp bạn đưa ra quyết định xem cái nào sẽ phục vụ ứng dụng của bạn tốt nhất, hãy xem Giới thiệu về Thư viện Python SQL Rất đáng để xem xét SQLite cho ứng dụng Python của bạn, bất kể nó là gì. Việc sử dụng cơ sở dữ liệu mang lại tính linh hoạt cho ứng dụng của bạn và nó có thể tạo ra những cơ hội đáng ngạc nhiên để thêm các tính năng bổ sung Phần kết luậnBạn đã nắm được rất nhiều kiến thức trong hướng dẫn này về cơ sở dữ liệu, SQLite, SQL và SQLAlchemy. Bạn đã sử dụng những công cụ này để di chuyển dữ liệu chứa trong tệp phẳng sang cơ sở dữ liệu SQLite, truy cập dữ liệu bằng SQL và SQLAlchemy, đồng thời cung cấp dữ liệu đó thông qua máy chủ web Trong hướng dẫn này, bạn đã học
Làm việc với cơ sở dữ liệu là một khái niệm trừu tượng mạnh mẽ để làm việc với dữ liệu bổ sung chức năng quan trọng cho các chương trình Python của bạn và cho phép bạn đặt các câu hỏi thú vị về dữ liệu của mình Bạn có thể lấy tất cả mã và dữ liệu bạn đã xem trong hướng dẫn này tại liên kết bên dưới Tải xuống mã mẫu. Nhấp vào đây để lấy mã bạn sẽ sử dụng để tìm hiểu về quản lý dữ liệu với SQLite và SQLAlchemy trong hướng dẫn này Đọc thêmHướng dẫn này là phần giới thiệu về cách sử dụng cơ sở dữ liệu, SQL và SQLAlchemy, nhưng còn nhiều điều nữa để tìm hiểu về các chủ đề này. Đây là những công cụ tinh vi, mạnh mẽ mà không một hướng dẫn đơn lẻ nào có thể trình bày đầy đủ. Dưới đây là một số tài nguyên để biết thêm thông tin nhằm mở rộng kỹ năng của bạn
Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. SQLite và SQLAlchemy trong Python. Di chuyển dữ liệu của bạn ra ngoài tệp phẳng 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Doug Farrell Doug là nhà phát triển Python với hơn 25 năm kinh nghiệm. Anh ấy viết về Python trên trang web cá nhân của mình và làm việc với tư cách là Kỹ sư web cấp cao của Shutterfly » Thông tin thêm về DougMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Joanna Gia-cốp Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi SQLite được sử dụng cho mục đích gì?SQLite được sử dụng để phát triển phần mềm nhúng cho các thiết bị như tivi, điện thoại di động, máy ảnh, v.v. . Nó có thể quản lý các yêu cầu HTTP có lưu lượng từ thấp đến trung bình. SQLite có thể thay đổi tệp thành tệp lưu trữ có kích thước nhỏ hơn với siêu dữ liệu ít hơn. SQLite được sử dụng làm tập dữ liệu tạm thời để xử lý một số dữ liệu trong ứng dụng.
Những lợi thế của việc sử dụng SQLite là gì?SQLite có thể di động trên tất cả các hệ điều hành 32-bit và 64-bit cũng như các kiến trúc lớn và nhỏ . Nhiều quy trình có thể được đính kèm với cùng một tệp ứng dụng và có thể đọc và ghi mà không can thiệp lẫn nhau. Nó có thể được sử dụng với tất cả các ngôn ngữ lập trình mà không có bất kỳ vấn đề tương thích nào.
SQLite có cần Python không?SQLite là cơ sở dữ liệu SQL dựa trên tệp, độc lập. SQLite đi kèm với Python và có thể được sử dụng trong bất kỳ ứng dụng Python nào của bạn mà không phải cài đặt bất kỳ phần mềm bổ sung nào.
SQLite có phải là một phần của Python không?Python có một thư viện để truy cập cơ sở dữ liệu SQLite, được gọi là sqlite3 , dùng để làm việc với cơ sở dữ liệu này đã được bao gồm trong gói Python kể từ phiên bản 2. 5. |