Yes, Tornado gells well with many databases like mysql, sqlite and mongodb. Below is an example of database connectivity and interaction with MongoDB from Tornado.
In this example, the user or client connects MongoDB database : library and collection: articles )with HTTP requests.
- get() – displays the records of mongodb collection with article id
- post() – helps the client to add articles with id, article title, and genre
- delete() – deletes the articles’s information
Please note: the example assumes that mongo server and pymongo (python driver for mongodb) is installed on the system
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tornado.ioloop | |
import tornado.web | |
import urlparse | |
## mongodb and pymongo installation assumed | |
import pymongo | |
from pymongo import Connection | |
class Article(tornado.web.RequestHandler): | |
def initialize(self): | |
self.conn = pymongo.Connection() | |
self.db=self.conn['library'] | |
def post(self): | |
article = urlparse.parse_qs(self.request.body) | |
for key in article: | |
article[key] = article[key][0] | |
collection = self.db['articles'] | |
self.db.articles.insert({"id":article['id'], "author":article['author'], "genre":article['genre']}) | |
def get(self): | |
articleid = self.get_argument("articleid", None) | |
if articleid is None: | |
articleList = self.db.articles.find() | |
self.write(str(list(articleList))) | |
else: | |
article = str(self.db.articles.find_one({"id":articleid})) | |
self.write(article) | |
def delete(self): | |
self.db.articles.drop() | |
application = tornado.web.Application([ | |
(r"/articles", Article), | |
],debug=True) | |
if __name__ == "__main__": | |
application.listen(8888) | |
tornado.ioloop.IOLoop.instance().start() |
Client Request
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import httplib2 | |
from urllib import urlencode | |
h = httplib2.Http() | |
## Add articles | |
data = {'id':'1', 'author':'B', 'genre':'comedy'} | |
body = urlencode(data) | |
h.request("http://127.0.0.1:8888/articles", "POST", body=body) | |
data = {'id':'2', 'author':'A', 'genre':'tragedy'} | |
body = urlencode(data) | |
h.request("http://127.0.0.1:8888/articles", "POST", body=body) | |
## View all articles | |
content, response = h.request("http://127.0.0.1:8888/articles", "GET") | |
print response | |
## View articles | |
data = {"articleid":1} | |
data = urlencode(data) | |
content, response = h.request("http://127.0.0.1:8888/articles"+ "?" + data, "GET") | |
print response | |
## Delete articles | |
content, response = h.request("http://127.0.0.1:8888/articles", "DELETE") | |
content, response = h.request("http://127.0.0.1:8888/articles", "GET") | |
print response |
The client program:
- Adds two records to the articles collection with HTTP POST request
- It then reads one of the articles with the HTTP GET request with article 1
- Client then drops all the records of the collection with HTTP DELETE request
Output
{u'genre': u'comedy', u'_id': ObjectId('503f4a601d41c81bf9d3360d'), u'id': u'1', u'author': u'B'} No Articles found