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ướicơ 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ở 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 taphiê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ớiSessionLocal 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 theoKhi 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
1người mẫu. pyTệ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ôiSử 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ệuCó 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
8Pydantic đả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 đồ. pyDò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 PydanticChủ 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ệuTiế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. pyPhầ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ệnuvicorn 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ụngLộ 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àyFastAPI/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. pyLư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