Wybierz zestaw danych ze strony Kaggle
Zestaw powinien być nietrywialny np. co najmniej kilkadziesiąt wierszy i kilka kolumn
Przykłady:
Dobrze gdyby wybrane były różnorodne bazy danych wśród zespołów
Wybrany zestaw danych ściągnij sobie lokalnie
Przygotuj sobie lokalnie schemat bazy danych SQL (np. PostgreSQL) albo NoSQL (np. MongoDB)
Przygotuj kod do zaimportowania danych do bazy
GET /objects
GET /object?name=xyz
POST /object
PUT /object
GET /stats
energy
i
loudness
albo pokazanie zależności
discount_percentage
od rating
w zbiorze
zawierającym zakupy na Amazonplantlst.txt
"Symbol","Synonym Symbol","Scientific Name with Author","Common Name","Family"
"ABAB","","Abutilon abutiloides (Jacq.) Garcke ex Hochr.","shrubby Indian mallow","Malvaceae"
"ABAB","ABAM5","Abutilon americanum (L.) Sweet","",""
...
insert.py
#! /usr/bin/env python
import csv
import pymongo
if __name__ == "__main__":
= []
entries with open("plantlst.txt") as infile:
= csv.DictReader(infile)
reader for row in reader:
entries.append(row)
= pymongo.MongoClient("mongodb://localhost:27017")
client = client["db"]
db = db["plants"]
plants plants.insert_many(entries)
$ mongosh
> use db
> db.plants.countDocuments()
90909
backend.py
#! /usr/bin/env python
import pymongo
from flask import Flask
from flask_restful import Resource, Api
= Flask(__name__)
app = Api(app)
api
class Plants(Resource):
def __init__(self):
self.client = pymongo.MongoClient('mongodb://localhost:27017')
self.db = self.client['db']
self.plants = self.db['plants']
self.columns = ["Symbol", "Synonym Symbol", "Scientific Name with Author", "Common Name", "Family"]
def get(self):
= self.plants.find({}, {'_id': 0})
results = list(map(dict, results))
results return results
'/')
api.add_resource(Plants,
if __name__ == '__main__':
=True, port=5000) app.run(debug
$ curl -s http://localhost:5000 | jq '. | length'
90909
frontend.py
#! /usr/bin/env python
from flask import Flask, render_template
import requests
= Flask(__name__, template_folder='templates')
app
@app.route('/')
def index():
= requests.get('http://localhost:5000')
r = r.json()
plants return render_template('index.html', plants=plants[:100])
if __name__ == '__main__':
=True, port=8080) app.run(debug
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous" />
</head>
<body>
<table class="table table-striped">
<tr>
<th>Symbol</th>
<th>Synonym Symbol</th>
<th>Scientific Name with Author</th>
<th>Common Name</th>
<th>Family</th>
</tr>
{% for plant in plants %}<tr>
<td>{{ plant['Symbol'] }}</td>
<td>{{ plant['Synonym Symbol'] }}</td>
<td>{{ plant['Scientific Name with Author'] }}</td>
<td>{{ plant['Common Name'] }}</td>
<td>{{ plant['Family'] }}</td>
</tr>
{% endfor %}</table>
</body>
</html>