| page_type | languages | products | description | urlFragment | ||||
|---|---|---|---|---|---|---|---|---|
sample |
|
|
Azure Cosmos DB is a fully managed globally distributed, multi-model database service, transparently replicating your data across any number of Azure regions. |
CosmosDB-Flask-Mongo-Sample |
Azure Cosmos DB is a fully managed globally distributed, multi-model database service, transparently replicating your data across any number of Azure regions. You can elastically scale throughput and storage, and take advantage of fast, single-digit-millisecond data access using the API of your choice backed by 99.999 SLA. This sample shows you how to use the Azure Cosmos DB for MongoDB API to store and access data from a Flask application.
-
Download the Azure Cosmos DB Emulator. The emulator is currently only supported on Windows. The sample shows how to use the sample with a production key from Azure, which can be done on any platform.
-
If you don’t already have Visual Studio Code installed, you can quickly install VS Code for your platform (Windows, Mac, Linux).
-
Be sure to add Python Language support by installing one of the popular Python extensions.
- Select an extension.
- Install the extension by typing
ext installinto the Command PaletteCtrl+Shift+P.
The examples in this document use Don Jayamanne's popular and full featured Python Extension.
Now let's clone the app, set the connection string, and run it.
- Open a git terminal window, such as git bash, and
cdto a working directory. - Clone this sample repository
- Run the following command to install the python modules.
pip install -r .\requirements.txt - Open the folder in Visual Studio Code or your IDE of choice.
Let's take a quick review of what's happening in the app. Open the app.py file under the root directory and you find that these lines of code create the Azure Cosmos DB connection. The following code uses the connection string for the local Azure Cosmos DB Emulator. The password needs to be split up as seen below to accommodate for the forward slashes that cannot be parsed otherwise.
-
Initialize the MongoDB client, retrieve the database, and authenticate.
client = MongoClient("mongodb://127.0.0.1:10250/?ssl=true") #host uri db = client.test #Select the database db.authenticate(name="localhost",password='C2y6yDjf5' + r'/R' + '+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw' + r'/Jw==')
-
Retrieve the collection or create it if it does not already exist.
todos = db.todo #Select the collection
-
Create the app
app = Flask(__name__) title = "TODO with Flask" heading = "ToDo Reminder"
-
Make sure the Azure Cosmos DB Emulator is running.
-
Open a terminal window and
cdto the directory that the app is saved in. -
Then set the environment variable for the Flask app with
set FLASK_APP=app.pyorexport FLASK_APP=app.pyif you are using a Mac. -
Run the app with
flask runand browse to http://127.0.0.1:5000/. -
Add and remove tasks and see them added and changed in the collection.
To deploy this app, you can create a new web app in Azure and enable continuous deployment with a fork of this github repo. Follow this tutorial to set up continuous deployment with Github in Azure.
When deploying to Azure, you should remove your application keys and make sure the section below is not commented out:
client = MongoClient(os.getenv("MONGOURL"))
db = client.test #Select the database
db.authenticate(name=os.getenv("MONGO_USERNAME"),password=os.getenv("MONGO_PASSWORD"))You then need to add your MONGOURL, MONGO_PASSWORD, and MONGO_USERNAME to the application settings. You can follow this tutorial to learn more about Application Settings in Azure Web Apps.
If you don't want to create a fork of this repo, you can also click the deploy to Azure button below. You should then go into Azure and set up the application settings with your Cosmos DB account info.
[!NOTE] If you plan to store your code in Github or other source control options, please be sure to remove your connection strings from the code. They can be set with application settings for the web app instead.