This is an example of a Python FastAPI Web Service that interacts with Oracle Database.
- Python 3
- Oracle Database connection details
- curl (optional)
git clone https://github.com/oracle-quickstart/fastapi-oracle-database-example.git
cd fastapi-oracle-database-example
python3 -m pip install -r requirements.txt
Set database username and connection string environment variables:
PYTHON_USERNAME
PYTHON_CONNECTSTRING
export PYTHON_USERNAME=cj
export PYTHON_CONNECTSTRING=localhost/orclpdb1
export PYTHON_USERNAME=admin
export PYTHON_CONNECTSTRING='(description= (retry_count=15)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.ap-sydney-1.oraclecloud.com))(connect_data=(service_name=gxxxxxx_yxxxx_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))'
To run the FastAPI app, use the following command:
uvicorn fapi:app --reload
If the uvicorn binary is not in your PATH, you may need to specify the full path, for example:
$HOME/Library/Python/3.9/bin/uvicorn fapi:app --reload
Enter your database user password when prompted.
The app will be accessible at http://localhost:8000 or http://YOUR_LOCAL_IP:8000
Endpoints are shown at http://localhost:8000/docs
They are:
POST
: to create dataGET
: to read dataPUT
: to update dataDELETE
: to delete data
Alternative documentation is at http://localhost:8000/redoc
To use the FastAPI app, you can use the 'Try it out' buttons on
http://localhost:8000/docs or alternatively use a command line tool such as
curl
.
curl -X 'POST' \
'http://localhost:8000/orders/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"order_id": 1,
"product_name": "New Product",
"quantity": 10
}'
curl -X 'PUT' \
'http://localhost:8000/orders/1' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"order_id": 1,
"product_name": "Updated Product",
"quantity": 20
}'
curl -X 'GET' \
'http://localhost:8000/orders/1' \
-H 'accept: application/json'
curl -X 'DELETE' \
'http://localhost:8000/orders/1' \
-H 'accept: application/json'
With FastAPI you get OpenAPI docs generated automatically if you go to path /docs
http://127.0.0.1:8000/docs
![Screen Shot 2023-08-03 at 10 40 58 am](https://private-user-images.githubusercontent.com/39692236/257971079-3b853031-793a-4237-80c8-54a72c6f194f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA1MzgzMDksIm5iZiI6MTcyMDUzODAwOSwicGF0aCI6Ii8zOTY5MjIzNi8yNTc5NzEwNzktM2I4NTMwMzEtNzkzYS00MjM3LTgwYzgtNTRhNzJjNmYxOTRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA5VDE1MTMyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE5NDA4MDU2ZTVjN2QxYTRjMTYyN2I0ZDMxYjJjOTA3YzM0MTQ4MTRjYjFiNjg3N2NkMTVjNTgzNTZjYTg3MjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.E_BQ-VjXPmIi4BLLcToJ7dn3qkqmabNrLa2KxD0y2AY)
http://127.0.0.1:8000/redoc
![Screen Shot 2023-08-07 at 10 36 34 am](https://private-user-images.githubusercontent.com/39692236/258674526-908c3794-206b-4e41-a296-37627128f148.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA1MzgzMDksIm5iZiI6MTcyMDUzODAwOSwicGF0aCI6Ii8zOTY5MjIzNi8yNTg2NzQ1MjYtOTA4YzM3OTQtMjA2Yi00ZTQxLWEyOTYtMzc2MjcxMjhmMTQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA5VDE1MTMyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU1YzdlNjEwMzFjZDVjNjlkMWZkNDhjOTQ4ZmM5NTkxMWIwN2Q0NmQ2YTFhYmQxZDYxYTUxMTRhYTMwNjM4N2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.7FsiJj3D_oxlHN1NJSpE7dO5L3A6cKAHe8C78_Vpxvs)
Oracle Database also provides native REST APIs capabilities. To learn more, see :
Product Page : https://www.oracle.com/database/technologies/appdev/rest.html
Hands-on LiveLab : https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=815