DB-API Python - geeksforgeeks

Trình ánh xạ quan hệ đối tượng [ORM] là một thư viện mã tự động chuyển dữ liệu được lưu trữ trong các bảng cơ sở dữ liệu quan hệ thành các đối tượng thường được sử dụng trong mã ứng dụng

Tại sao ORM hữu ích?

ORM cung cấp mức độ trừu tượng cao trên cơ sở dữ liệu quan hệ cho phép nhà phát triển viết mã Python thay vì SQL để tạo, đọc, cập nhật và xóa dữ liệu cũng như lược đồ trong cơ sở dữ liệu của họ. Các nhà phát triển có thể sử dụng ngôn ngữ lập trình mà họ cảm thấy thoải mái để làm việc với cơ sở dữ liệu thay vì viết các câu lệnh SQL hoặc các thủ tục được lưu trữ

Ví dụ: nếu không có ORM, nhà phát triển sẽ viết câu lệnh SQL sau để truy xuất mọi hàng trong bảng NGƯỜI DÙNG trong đó cột zip_code là 94107

SELECT * FROM USERS WHERE zip_code=94107;

Thay vào đó, truy vấn Django ORM tương đương sẽ giống như mã Python sau

# obtain everyone in the 94107 zip code and assign to users variable
users = Users.objects.filter[zip_code=94107]

Khả năng viết mã Python thay vì SQL có thể tăng tốc độ phát triển ứng dụng web, đặc biệt là khi bắt đầu dự án. Khả năng tăng tốc độ phát triển tiềm năng đến từ việc không phải chuyển từ mã Python sang viết các câu lệnh SQL mô hình khai báo. Mặc dù một số nhà phát triển phần mềm có thể không ngại chuyển đổi qua lại giữa các ngôn ngữ, nhưng việc loại bỏ một nguyên mẫu hoặc bắt đầu một ứng dụng web bằng một ngôn ngữ lập trình đơn lẻ thường dễ dàng hơn.

ORM cũng giúp về mặt lý thuyết có thể chuyển đổi một ứng dụng giữa các cơ sở dữ liệu quan hệ khác nhau. Ví dụ: nhà phát triển có thể sử dụng SQLite để phát triển cục bộ và MySQL trong sản xuất. Một ứng dụng sản xuất có thể được chuyển từ MySQL sang PostgreSQL với các sửa đổi mã tối thiểu

Tuy nhiên, trên thực tế, tốt nhất là sử dụng cùng một cơ sở dữ liệu để phát triển cục bộ như được sử dụng trong sản xuất. Nếu không, các lỗi không mong muốn có thể xảy ra trong sản xuất mà không thấy trong môi trường phát triển cục bộ. Ngoài ra, rất hiếm khi một dự án chuyển từ cơ sở dữ liệu đang sản xuất này sang cơ sở dữ liệu khác trừ khi có lý do cấp bách

Tôi có phải sử dụng ORM cho ứng dụng web của mình không?

Không cần thư viện ORM Python để truy cập cơ sở dữ liệu quan hệ. Trên thực tế, quyền truy cập cấp thấp thường được cung cấp bởi một thư viện khác được gọi là trình kết nối cơ sở dữ liệu, chẳng hạn như psycopg [đối với PostgreSQL] hoặc MySQL-python [đối với MySQL]. Hãy xem bảng bên dưới cho biết cách ORM có thể hoạt động với các khung và trình kết nối web khác nhau cũng như cơ sở dữ liệu quan hệ

Ví dụ, bảng trên cho thấy rằng SQLAlchemy có thể hoạt động với các khung web và trình kết nối cơ sở dữ liệu khác nhau. Nhà phát triển cũng có thể sử dụng ORM mà không cần khung web, chẳng hạn như khi tạo công cụ phân tích dữ liệu hoặc tập lệnh bó mà không có giao diện người dùng

Nhược điểm của việc sử dụng ORM là gì?

Có rất nhiều nhược điểm của ORM, bao gồm

  1. trở kháng không phù hợp
  2. Khả năng giảm hiệu suất
  3. Chuyển độ phức tạp từ cơ sở dữ liệu sang mã ứng dụng

trở kháng không phù hợp

Cụm từ "không phù hợp trở kháng" thường được sử dụng cùng với ORM. Trở kháng không phù hợp là một thuật ngữ chung cho những khó khăn xảy ra khi di chuyển dữ liệu giữa các bảng quan hệ và các đối tượng ứng dụng. Ý chính là cách nhà phát triển sử dụng các đối tượng khác với cách dữ liệu được lưu trữ và nối trong các bảng quan hệ

Bài viết về sự không phù hợp trở kháng ORM này thực hiện rất tốt việc giải thích khái niệm này ở mức cao và cung cấp các sơ đồ để hình dung vấn đề xảy ra

Khả năng giảm hiệu suất

Một trong những mối quan tâm liên quan đến bất kỳ sự trừu tượng hóa hoặc khuôn khổ cấp cao hơn nào là khả năng làm giảm hiệu suất. Với ORM, hiệu suất đạt được đến từ việc dịch mã ứng dụng thành câu lệnh SQL tương ứng có thể không được điều chỉnh đúng cách

ORM cũng thường dễ thử nhưng khó thành thạo. Ví dụ: người mới bắt đầu sử dụng Django có thể không biết về Django và cách nó có thể cải thiện hiệu suất quan hệ khóa ngoại của một số truy vấn. Có hàng tá mẹo và thủ thuật hiệu suất cho mọi ORM. Có thể đầu tư thời gian vào việc học những điều kỳ quặc đó có thể tốt hơn là chỉ học SQL và cách viết thủ tục lưu sẵn

Có rất nhiều sự phân vân "có thể hoặc không" và "tiềm năng" trong phần này. Trong các dự án lớn, ORM đủ tốt cho khoảng 80-90% trường hợp sử dụng nhưng trong 10-20% tương tác cơ sở dữ liệu của dự án, có thể có những cải tiến lớn về hiệu suất bằng cách yêu cầu quản trị viên cơ sở dữ liệu có kiến ​​thức viết các câu lệnh SQL được điều chỉnh để thay thế mã SQL do ORM tạo ra

Chuyển độ phức tạp từ cơ sở dữ liệu sang mã ứng dụng

Mã để làm việc với dữ liệu của ứng dụng phải nằm ở đâu đó. Trước khi ORM phổ biến, các thủ tục lưu trữ cơ sở dữ liệu được sử dụng để đóng gói logic cơ sở dữ liệu. Với ORM, mã thao tác dữ liệu thay vào đó nằm trong cơ sở mã Python của ứng dụng. Việc bổ sung logic xử lý dữ liệu trong cơ sở mã nói chung không phải là vấn đề với thiết kế ứng dụng hợp lý, nhưng nó làm tăng tổng lượng mã Python thay vì phân tách mã giữa ứng dụng và thủ tục lưu trữ cơ sở dữ liệu

Triển khai ORM Python

Có rất nhiều triển khai ORM được viết bằng Python, bao gồm

Có các ORM khác, chẳng hạn như Canonical's Storm, nhưng hầu hết chúng dường như không được phát triển tích cực. Tìm hiểu thêm về các ORM hoạt động chính bên dưới

ORM của Django

Khung web Django đi kèm với mô-đun ánh xạ quan hệ đối tượng tích hợp sẵn của riêng nó, thường được gọi là "ORM Django" hoặc "ORM của Django"

ORM của Django hoạt động tốt cho các hoạt động cơ sở dữ liệu đơn giản và phức tạp trung bình. Tuy nhiên, thường có những phàn nàn rằng ORM làm cho các truy vấn phức tạp phức tạp hơn nhiều so với việc viết SQL thẳng hoặc sử dụng SQLAlchemy

Về mặt kỹ thuật, có thể thả xuống SQL nhưng nó liên kết các truy vấn với việc triển khai cơ sở dữ liệu cụ thể. ORM được kết hợp chặt chẽ với Django, vì vậy việc thay thế ORM mặc định bằng SQLAlchemy hiện là một giải pháp thay thế cho hack. Lưu ý rằng mặc dù có thể các phụ trợ ORM có thể hoán đổi sẽ khả dụng trong tương lai vì hiện tại có thể thay đổi công cụ mẫu để kết xuất đầu ra trong Django

Vì phần lớn các dự án Django được gắn với ORM mặc định, tốt nhất bạn nên đọc các trường hợp sử dụng nâng cao và các công cụ để thực hiện công việc tốt nhất của mình trong khuôn khổ hiện có

SQLAlchemy ORM

SQLAlchemy là một ORM Python được đánh giá cao vì nó có mức độ trừu tượng "vừa phải" và dường như làm cho các truy vấn cơ sở dữ liệu phức tạp dễ viết hơn Django ORM trong hầu hết các trường hợp. Có cả một trang về SQLAlchemy mà bạn nên đọc nếu muốn tìm hiểu thêm về cách sử dụng thư viện

nước tiểu ORM

Peewee là một triển khai ORM của Python được viết là "đơn giản hơn, nhỏ hơn và dễ hack hơn" so với SQLAlchemy. Đọc toàn bộ trang Peewee để biết thêm thông tin về triển khai ORM Python

ngựa con

Pony ORM là một ORM Python khác có sẵn dưới dạng mã nguồn mở, trong Apache 2. 0 giấy phép

SQLObject ORM

SQLObject là một ORM đã được phát triển nguồn mở tích cực trong hơn 14 năm, kể từ

Di chuyển lược đồ

Di chuyển lược đồ, chẳng hạn như khi bạn cần thêm một cột mới vào bảng hiện có trong cơ sở dữ liệu của mình, về mặt kỹ thuật không phải là một phần của ORM. Tuy nhiên, vì ORM thường dẫn đến cách tiếp cận cơ sở dữ liệu [trong nhiều trường hợp khiến nhà phát triển gặp nguy hiểm], các thư viện để thực hiện di chuyển lược đồ thường đi đôi với việc sử dụng Python ORM trên các dự án ứng dụng web

Di chuyển lược đồ cơ sở dữ liệu là một chủ đề phức tạp và xứng đáng có trang riêng. Hiện tại, chúng tôi sẽ gộp các tài nguyên di chuyển lược đồ trong các liên kết ORM bên dưới

Tài nguyên ORM chung

  • Tổng quan chi tiết về ORM này là một mô tả chung về cách ORM hoạt động và cách sử dụng chúng

  • Dự án GitHub ví dụ này triển khai cùng một ứng dụng Flask với một số ORM khác nhau. SQLAlchemy, Peewee, MongoEngine, stdnet và PonyORM

  • Martin Fowler giải quyết sự ghét bỏ ORM trong một bài luận về việc ORM thường bị lạm dụng như thế nào nhưng chúng mang lại lợi ích cho các nhà phát triển

  • Sự trỗi dậy và sụp đổ của ánh xạ quan hệ đối tượng là một cuộc nói chuyện về lịch sử của ORM không né tránh một số tranh cãi. Nhìn chung, tôi thấy việc phê bình các ý tưởng mang tính khái niệm xứng đáng với thời gian đọc các trang trình bày và văn bản đi kèm

  • Nếu bạn bối rối về sự khác biệt giữa trình kết nối, chẳng hạn như MySQL-python và ORM như SQLAlchemy, hãy đọc câu trả lời StackOverflow này về chủ đề này

  • ORM đã dạy tôi điều gì. chỉ học SQL là một khía cạnh khác trong cuộc tranh luận về ORM so với SQL nhúng/các thủ tục được lưu trữ. Kết luận của tác giả là trong khi làm việc với các ORM như SQLAlchemy và Hibernate [ORM dựa trên Java] có thể tiết kiệm thời gian trước, có các vấn đề khi dự án phát triển chẳng hạn như một phần đối tượng và dư thừa lược đồ. Tôi nghĩ rằng tác giả đưa ra một số điểm hợp lệ rằng một số ORM có thể là nền tảng không vững chắc cho các ứng dụng dựa trên cơ sở dữ liệu cực kỳ phức tạp. Tuy nhiên, tôi không đồng ý với kết luận quan trọng để tránh các ORM có lợi cho các thủ tục được lưu trữ. Các thủ tục được lưu trữ có các vấn đề riêng và không có giải pháp hoàn hảo, nhưng cá nhân tôi thích sử dụng ORM khi bắt đầu hầu hết mọi dự án ngay cả khi sau đó nó cần được thay thế bằng các truy vấn SQL trực tiếp

  • Việt Nam của Khoa học Máy tính cung cấp quan điểm từ Ted Neward, người khởi xướng cụm từ "Ánh xạ đối tượng/quan hệ là Việt Nam của Khoa học Máy tính" mà ông đã nói đến lần đầu tiên vào năm 2004. Ý chính của lập luận chống lại ORM được ghi lại trong câu trích dẫn của Ted rằng ORM "đại diện cho một vũng lầy bắt đầu tốt, trở nên phức tạp hơn khi thời gian trôi qua và chẳng bao lâu sau sẽ lôi kéo người dùng của nó vào một cam kết không có ranh giới rõ ràng, không có điều kiện thắng rõ ràng . " Có những bài đăng tiếp theo trên Coding Horror và một bài khác từ Ted có tựa đề Suy nghĩ về bình luận Việt Nam

  • Xoay bàn. Làm thế nào để hòa hợp với Trình ánh xạ quan hệ đối tượng của bạn sử dụng cụm từ hài hước nhưng sâu sắc "sự từ chối cơ sở dữ liệu" để mô tả cách một số ORM cung cấp một mô hình sử dụng có thể gây ra nhiều vấn đề hơn là chúng giải quyết các truy vấn SQL trực tiếp. Sau đó, bài đăng sẽ đi vào chi tiết hơn về các vấn đề có thể phát sinh và cách giảm thiểu hoặc tránh chúng

Tài nguyên SQLAlchemy và Peewee

Có thể tìm thấy danh sách đầy đủ các tài nguyên SQLAlchemy và Peewee ORM trên các trang tương ứng của chúng

Liên kết Django ORM

Có thể tìm thấy danh sách tài nguyên được tuyển chọn trên trang tài nguyên Django ORM chuyên dụng

Tài nguyên ORM Pony

Tất cả tài nguyên ORM Pony được liệt kê trên trang Pony ORM chuyên dụng

Tài nguyên đối tượng SQL

SQLObject đã có từ lâu như một dự án mã nguồn mở nhưng tiếc là không có nhiều hướng dẫn về nó. Các cuộc nói chuyện và bài viết sau đây sẽ giúp bạn bắt đầu. Nếu bạn quan tâm đến dự án và viết các tài nguyên bổ sung, hãy gửi phiếu phát hành để chúng tôi có thể thêm chúng vào danh sách này

Làm cách nào để tạo API cơ sở dữ liệu bằng Python?

Đây là logic chúng ta phải thực hiện. .
Tìm nạp dữ liệu JSON được cung cấp cho tên người dùng, mật khẩu, tên, họ và tuổi
Tạo một thể hiện của lớp Người dùng với dữ liệu được cung cấp
Thêm người dùng này vào cơ sở dữ liệu và thực hiện giao dịch
Trả lại thông báo cho biết người dùng đã được chèn

Làm cách nào để sử dụng db trong Python?

Để viết các ứng dụng cơ sở dữ liệu bằng Python, có năm bước cần làm theo. .
Nhập giao diện SQL bằng lệnh sau. >>> nhập MySQLdb
Thiết lập kết nối với cơ sở dữ liệu bằng lệnh sau. >>> conn=MySQLdb. kết nối [máy chủ = 'localhost', người dùng = 'root', passwd ='']

Cơ sở dữ liệu DB là gì

DB-API là từ viết tắt của Giao diện lập trình ứng dụng DataBase và thư viện cho phép Python kết nối với máy chủ cơ sở dữ liệu . Tùy thuộc vào thư viện DB quan hệ mà bạn sử dụng, chúng có thể có các mô-đun DB-API của riêng chúng.

Python có thể tương tác với cơ sở dữ liệu không?

Python có thể được sử dụng trong các ứng dụng cơ sở dữ liệu . Một trong những cơ sở dữ liệu phổ biến nhất là MySQL.

Chủ Đề