Python DB-API so với SQLAlchemy

Qua. Edward Krueger Nhà khoa học dữ liệu và Người hướng dẫn và Trợ lý giảng dạy và Người viết kỹ thuật của Douglas Franklin

Liên kết tới repo Github bằng mã ứng dụng. https. //github. com/edkrueger/sars-fastapi

Ảnh của Chris Liverani trên Bapt

FastAPI là gì?

FastAPI là API hiệu suất cao dựa trên Pydantic và Starlette. FastAPI tích hợp tốt với nhiều gói, bao gồm nhiều ORM. Với FastAPI, bạn có thể sử dụng hầu hết các cơ sở dữ liệu quan hệ. FastAPI dễ dàng tích hợp với SQLAlchemy và SQLAlchemy hỗ trợ PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server và những thứ khác

Các khung vi dịch vụ python khác như Flask không dễ dàng tích hợp với SQLAlchemy. Người ta thường sử dụng Flask với gói có tên Flask-SQLAlchemy. Flask-SQLAlchemy không cần thiết và có vấn đề riêng. Để biết thêm thông tin về điều này, hãy đọc bài viết này

Không có FastAPI-SQLALchemly vì FastAPI tích hợp tốt với vanilla SQLAlchemy

Cấu trúc ứng dụng mô-đun

Khi viết một ứng dụng, tốt nhất là tạo mã python độc lập và mô-đun. Ở đây chúng tôi sẽ thảo luận về các tệp cấu thành sau của ứng dụng, cơ sở dữ liệu của chúng tôi. py, người mẫu. py, lược đồ. py, chính. py và tải. py

Lý tưởng nhất là bạn chỉ phải xác định các mô hình cơ sở dữ liệu của mình một lần. Sử dụng

uvicorn app.main:app
1 và
uvicorn app.main:app
2 của SQLAlchemy cho phép bạn chỉ viết một lớp cho mỗi bảng để sử dụng trong ứng dụng, để sử dụng trong Python bên ngoài ứng dụng và sử dụng trong cơ sở dữ liệu. Với cơ sở dữ liệu riêng. py và các mô hình. py, chúng tôi thiết lập các lớp bảng cơ sở dữ liệu và kết nối một lần, sau đó gọi chúng sau khi cần

Để tránh nhầm lẫn giữa các mô hình SQLAlchemy và các mô hình Pydantic, chúng ta sẽ có tệp

uvicorn app.main:app
3 với các mô hình SQLAlchemy và tệp
uvicorn app.main:app
4 với các mô hình Pydantic. Cũng cần lưu ý rằng SQLAlchemy và Pydantic sử dụng cú pháp hơi khác nhau để xác định các mô hình, như đã thấy trong các tệp bên dưới

cơ sở dữ liệu. py

Đây là tệp xác định kết nối cơ sở dữ liệu của chúng tôi bằng SQLAlchemy

cơ sở dữ liệu. py

Cơ sở khai báo và siêu dữ liệu

Lớp cơ sở

uvicorn app.main:app
1 chứa một đối tượng
uvicorn app.main:app
6 trong đó các đối tượng
uvicorn app.main:app
7 mới được định nghĩa được thu thập. Đối tượng MetaData này được truy cập khi chúng ta gọi dòng
uvicorn app.main:app
8 để tạo tất cả các bảng của chúng ta

phiên cục bộ. Xử lý các vấn đề về luồng

SQLAlchemy bao gồm một đối tượng trợ giúp giúp thiết lập phạm vi

uvicorn app.main:app
0 do người dùng xác định. Điều này hữu ích để loại bỏ các sự cố phân luồng trên ứng dụng của bạn

Để tạo một phiên, bên dưới chúng tôi sử dụng hàm

uvicorn app.main:app
1 và truyền cho nó một vài đối số. Sessionmaker là một nhà máy để khởi tạo các đối tượng Phiên mới. Sessionmaker khởi tạo các phiên này bằng cách yêu cầu kết nối từ nhóm kết nối của công cụ và gắn kết nối vào đối tượng Phiên mới

SessionLocal từ cơ sở dữ liệu. py

Khởi tạo một đối tượng phiên mới cũng được gọi là "kiểm tra" một kết nối. Cơ sở dữ liệu lưu trữ danh sách các kết nối/quy trình này. Vì vậy, khi bạn bắt đầu một phiên làm việc mới, hãy lưu ý rằng bạn cũng đang bắt đầu một quy trình mới trong cơ sở dữ liệu. Nếu cơ sở dữ liệu không đóng các kết nối này, thì có thể đạt tới số lượng kết nối tối đa. Cơ sở dữ liệu cuối cùng sẽ giết chết các quá trình nhàn rỗi như kết nối cũ;

SQLAlchemy có một số tùy chọn nhóm để ngăn chặn điều này, nhưng tốt nhất là loại bỏ các kết nối khi chúng không còn cần thiết. Các tài liệu FastAPI bao gồm chức năng

uvicorn app.main:app
2 cho phép một tuyến đường sử dụng cùng một phiên thông qua một yêu cầu và sau đó đóng nó khi yêu cầu kết thúc. Sau đó,
uvicorn app.main:app
2tạo phiên mới cho yêu cầu tiếp theo

Khi chúng tôi đã thiết lập phiên và kết nối cơ sở dữ liệu, chúng tôi đã sẵn sàng để xây dựng các thành phần ứng dụng khác của mình

người mẫu. py

Lưu ý rằng chúng tôi nhập lớp

uvicorn app.main:app
4, được xác định trong cơ sở dữ liệu. py ở trên, vào các mô hình. py bên dưới để sử dụng
uvicorn app.main:app
1

người mẫu. py

Tệp này tạo mô hình hoặc lược đồ cho bảng

uvicorn app.main:app
6 trong cơ sở dữ liệu của chúng tôi

Sử dụng

uvicorn app.main:app
1 của SQLAlcehmy cho phép bạn chỉ viết một mô hình cho mỗi bảng mà ứng dụng sử dụng. Mô hình đó sau đó được sử dụng trong Python bên ngoài ứng dụng và trong cơ sở dữ liệu

Có các tệp Python riêng biệt này là tốt vì bạn có thể sử dụng cùng một mô hình để truy vấn hoặc tải dữ liệu bên ngoài ứng dụng. Ngoài ra, bạn sẽ có một phiên bản của mỗi mô hình, giúp đơn giản hóa quá trình phát triển

Các tệp Python mô-đun này có thể được sử dụng để tham chiếu các mô hình hoặc cơ sở dữ liệu giống nhau trong các đường dẫn dữ liệu, tạo báo cáo và bất kỳ nơi nào khác cần chúng

lược đồ. py

Ở đây chúng tôi viết lược đồ của chúng tôi cho Pydantic. Hãy nhớ rằng FastAPI được xây dựng dựa trên Pydantic. Phương tiện chính để xác định các đối tượng trong Pydantic là thông qua các mô hình kế thừa từ

uvicorn app.main:app
8

Pydantic đảm bảo rằng các trường dữ liệu của mô hình kết quả phù hợp với các loại trường mà chúng tôi đã xác định, sử dụng các loại Python hiện đại tiêu chuẩn, cho mô hình

lược đồ. py

Dòng

uvicorn app.main:app
9 cho phép ứng dụng lấy các đối tượng ORM và tự động dịch chúng thành phản hồi. Tính năng tự động hóa này giúp chúng tôi không phải lấy dữ liệu ra khỏi ORM theo cách thủ công, biến dữ liệu đó thành từ điển, sau đó tải dữ liệu vào bằng Pydantic

Chủ yếu. py

Đây là nơi chúng tôi tập hợp tất cả các thành phần mô-đun lại với nhau

Sau khi nhập tất cả các thành phần phụ thuộc và ứng dụng mô-đun, chúng tôi gọi

uvicorn app.main:app
10 để tạo các mô hình của mình trong cơ sở dữ liệu

Tiếp theo, chúng tôi xác định ứng dụng của mình và thiết lập Phần mềm trung gian CORS

chủ yếu. py

Phần mềm trung gian CORS

CORS hoặc "Chia sẻ tài nguyên nguồn gốc chéo" đề cập đến các tình huống trong đó giao diện người dùng đang chạy trong trình duyệt có mã JavaScript giao tiếp với phần phụ trợ và phần phụ trợ ở "nguồn gốc" khác với phần đầu

Để định cấu hình phần mềm trung gian CORS trong ứng dụng FastAPI của bạn

  • Nhập khẩu
    uvicorn app.main:app
    11
  • Tạo danh sách các nguồn gốc được phép dưới dạng chuỗi, tôi. e. , “http. //máy chủ cục bộ,” “http. //máy chủ cục bộ. 8080. ”
  • Thêm nó dưới dạng “phần mềm trung gian” vào ứng dụng FastAPI của bạn

Bạn cũng có thể chỉ định nếu chương trình phụ trợ của bạn cho phép

  • Thông tin xác thực [Tiêu đề ủy quyền, Cookie, v.v. ]
  • Các phương thức HTTP cụ thể [
    uvicorn app.main:app
    12,
    uvicorn app.main:app
    13] hoặc tất cả chúng với ký tự đại diện
    uvicorn app.main:app
    14
  • Các tiêu đề HTTP cụ thể hoặc tất cả chúng với ký tự đại diện
    uvicorn app.main:app
    14

Để mọi thứ hoạt động chính xác, tốt nhất bạn nên chỉ định rõ ràng nguồn gốc được phép. Ngoài ra, vì lý do bảo mật, bạn nên nêu rõ nguồn gốc nào có thể truy cập ứng dụng của mình

Thiết lập đúng cách phần mềm trung gian CORS sẽ loại bỏ mọi sự cố CORS trong ứng dụng của bạn

Hàm

uvicorn app.main:app
2 đảm bảo rằng bất kỳ tuyến đường nào đi qua chức năng này đều phải có kết nối cơ sở dữ liệu SessionLocal của chúng tôi khi cần và phiên được đóng sau khi sử dụng

Lộ trình

uvicorn app.main:app
17 là để xem dữ liệu của ứng dụng của chúng tôi. Lưu ý rằng chúng tôi sử dụng lược đồ. py cho giao diện người dùng và các mô hình. py để truy vấn phụ trợ của chúng tôi trong tuyến đường này

FastAPI/bản ghi lộ trình

Đang tải dữ liệu bên ngoài

Thay vì sử dụng ứng dụng để tải dữ liệu, chúng tôi tải cơ sở dữ liệu bằng một tệp Python riêng

Đây là một tệp Python mẫu đọc dữ liệu từ CSV và chèn dữ liệu đó vào cơ sở dữ liệu

trọng tải. py

Lưu ý rằng chúng tôi nhập các mô hình, phiên tùy chỉnh SessionLocal và công cụ của chúng tôi mà chúng tôi đã xác định trong các tệp Python khác. Sau đó, chúng tôi đọc CSV và sử dụng lược đồ

uvicorn app.main:app
18, thêm
uvicorn app.main:app
19 vào cơ sở dữ liệu thông qua kết nối
uvicorn app.main:app
20

Đang tải cơ sở dữ liệu

Nếu ứng dụng của bạn được thiết lập đúng cách, bao gồm cả chuỗi kết nối cơ sở dữ liệu, bạn có thể gọi

python load.py

Điều này sẽ tải cơ sở dữ liệu cục bộ hoặc từ xa của bạn mà không cần phải chạy ứng dụng

Kiểm tra ứng dụng

Để chạy ứng dụng cục bộ bằng DB từ xa, trong thiết bị đầu cuối hãy chạy

uvicorn app.main:app

Điều này chạy ứng dụng của bạn tại địa phương. Phiên bản cục bộ này được kết nối với cơ sở dữ liệu đám mây mà chúng tôi vừa tải, vì vậy hãy kiểm tra tuyến /records để xem dữ liệu

Phần kết luận

Cấu trúc ứng dụng mô-đun được sử dụng cho phép chúng tôi xác định mô hình một lần rồi sử dụng mô hình đó khi cần. Thực tiễn này làm cho việc phát triển dễ dàng hơn nhiều vì bạn chỉ có một tệp để gỡ lỗi nếu có gì đó không ổn. Ngoài ra, mã của bạn sẽ được tái sử dụng nhiều hơn và sẵn sàng cho một dự án khác

Đối với dự án dữ liệu tiếp theo của bạn, cho dù đó là bảng điều khiển, nhật ký dữ liệu hay API, hãy nhớ dùng thử FastAPI. Nó rất nhanh và dễ nhận, và họ có tài liệu tuyệt vời để hướng dẫn bạn thực hiện

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

DB-API là API tiêu chuẩn của Python được sử dụng để truy cập cơ sở dữ liệu . Nó cho phép bạn viết một chương trình duy nhất hoạt động với nhiều loại cơ sở dữ liệu quan hệ thay vì viết một chương trình riêng cho từng loại.

Tại sao nên sử dụng SQLAlchemy Python?

SQLAlchemy là ORM được lựa chọn để làm việc với cơ sở dữ liệu quan hệ trong python. Lý do khiến SQLAlchemy trở nên phổ biến là vì nó rất đơn giản để triển khai, giúp bạn phát triển mã nhanh hơn và không yêu cầu kiến ​​thức về SQL để bắt đầu.

Tôi nên sử dụng SQLAlchemy hay SQLite?

SQLite là một công cụ lưu trữ cơ sở dữ liệu có thể so sánh tốt hơn với những thứ như PostgreSQL, Oracle, MSSQL . Nó được sử dụng để lưu trữ và truy xuất dữ liệu có cấu trúc từ các tệp. SQLAlchemy là một thư viện python cung cấp một trình ánh xạ quan hệ đối tượng [ORM].

Điều nào sau đây mô tả đúng nhất về Python DB

DB-API là một bộ tiêu chuẩn được tuân theo bởi các mô-đun có chức năng kết nối cơ sở dữ liệu với các chương trình Python .

Chủ Đề