Vegyük alapul a korábbi könyvtár feladatot.
A feladat SQLite-os adattárolással való átalakítását mutatja a következő példa:
from flask import Flask, jsonify, request
import sqlite3
app = Flask(__name__)
# Kapcsolódás az adatbázishoz
def db_query(query, params=()):
conn = sqlite3.connect('konyvek.db') # kapcsolat létrehozása a 'konyvek.db'-vel
cursor = conn.cursor() # az adatbáziskezelő rendszerrel való kommunikáció megteremtése
cursor.execute(query, params)
result = cursor.fetchall() # összes sort visszaadja lista formájában
conn.commit()
cursor.close()
conn.close()
return result
# Adatbázis inicilizálás
db_query('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT NOT NULL,
published_year INTEGER NOT NULL
)
''')
# Új könyv hozzáadása
@app.route('/books', methods=['POST'])
def add_book():
data = request.get_json()
if not data or 'title' not in data or 'author' not in data or 'published_year' not in data:
return jsonify({'error': 'Hiányzó adatok'}), 400
db_query('INSERT INTO books (title, author, published_year) VALUES (?, ?, ?)',
(data['title'], data['author'], data['published_year']))
return jsonify({ 'message': 'Könyv sikeresen elmentve'}), 201
# Könyvek listázása
@app.route('/books', methods=['GET'])
def get_books():
books = db_query('SELECT * FROM books')
return jsonify([{'id': book[0], 'title': book[1], 'author': book[2], 'published_year': book[3]} for book in books]), 200
# Könyv részleteinek lekérdezése
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = db_query('SELECT * FROM books WHERE id = ?', (book_id,))
if book:
return jsonify({'id': book[0][0], 'title': book[0][1], 'author': book[0][2], 'published_year': book[0][3]}), 200
return jsonify({'error': 'Könyv nem található'}), 404
# Könyv frissítése
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
data = request.get_json()
if not data:
return jsonify({'error': 'Hiányzó adatok'}), 400
db_query('UPDATE books SET title = ?, author = ?, published_year = ? WHERE id = ?',
(data.get('title'), data.get('author'), data.get('published_year'), book_id))
return jsonify({'message': 'Könyv sikeresen frissítve'}), 200
# Könyv törlése
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
db_query('DELETE FROM books WHERE id = ?', (book_id,))
return jsonify({'message': 'Könyv sikeresen törölve'}), 200
if __name__ == '__main__':
app.run(debug=True)
Ahhoz, hogy leteszteljük, tényleg működik-e a program, a következő mintaadatokat használhatjuk.
Figyelem! Linux-ra lettek írva a mintaadatok!
- Könyv beszúrás
curl -X POST -H "Content-Type: application/json" -d '{"title": "Gyuruk ura", "author": "Tolkein", "published_year": "2000"}' http://127.0.0.1:5000/books
curl -X POST -H "Content-Type: application/json" -d '{"title": "Hobbit", "author": "Tolkein", "published_year": "2002"}' http://127.0.0.1:5000/books
curl -X POST -H "Content-Type: application/json" -d '{"title": "Ajtó", "author": "Szabó Magda", "published_year": "1980"}' http://127.0.0.1:5000/books
curl -X POST -H "Content-Type: application/json" -d '{"title": "Tűzgyújtó", "author": "Stephen King", "published_year": "1978"}' http://127.0.0.1:5000/books
- Könyvek lekérdezése
curl http://127.0.0.1:5000/books
- Adott könyv lekérdezés
curl http://127.0.0.1:5000/books/1
- Könyv módosítás
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Proba","author":"Teszt Elek","published_year":"1998"}' http://127.0.0.1:5000/books/2
- Könyv törlése
curl -X DELETE http://127.0.0.1:5000/books/2