Példa adatbáziskapcsolatra

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