Flask i SQLAlchemy

https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/_static/flask-sqlalchemy-logo.png
https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/

Każda kolumna w tabeli ma określony typ danych, na przykład tekstowy, liczbowy lub datowy. Typ danych określa, jakie rodzaje danych można przechowywać w danej kolumnie.

Bazy danych SQL składają się z trzech podstawowych elementów:

  1. Tabele – to struktury przechowujące dane w postaci wierszy i kolumn. Każda tabela ma unikalną nazwę i składa się z jednego lub wielu kolumn.
  2. Kolumny – każda kolumna ma swoją nazwę oraz określony typ danych, który określa rodzaj danych, które można przechowywać w tej kolumnie.
  3. Wiersze – to pojedyncze rekordy w tabeli, które składają się z danych przechowywanych w każdej z kolumn. Każdy wiersz ma unikalny identyfikator (klucz główny), który służy do identyfikowania go w bazie danych.

Bazy danych SQL umożliwiają manipulowanie danymi za pomocą języka SQL, który umożliwia wykonywanie operacji takich jak tworzenie, aktualizowanie i usuwanie danych z tabel.” Koniec cytatu z inteligencji;)

Poniżej bardzo dobre narzędzie do pracy z bazami danych SQLite:

KOD

Poniżej kod, który pokazuje istotę działania biblioteki SQLAlchemy. Tworzymy bazę, kreujemy klasę, która buduje strukturę bazy. Serwer dla czujników na ESP8266 albo ESP32

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import json

app = Flask(__name__)

# Konfiguracja bazy danych
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///iot_data.db'  # Użyj SQLite jako przykładowej bazy danych
db = SQLAlchemy(app)

# Model danych
class SensorData(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    device_name = db.Column(db.String(50), nullable=False)
    data = db.Column(db.String(200), nullable=False)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

# Endpoint do dodawania danych pomiarowych
@app.route('/add_data', methods=['POST'])
def add_data():
    data = request.json
    device_name = data.get('device_name')
    data_json = json.dumps(data.get('data'))  # Konwersja słownika na JSON

    new_data = SensorData(device_name=device_name, data=data_json)

    db.session.add(new_data)
    db.session.commit()

    return jsonify({'message': 'Dane pomiarowe dodane poprawnie.'}), 201

@app.route('/get_data', methods=['GET'])
def get_data():
    all_data = SensorData.query.all()
    data_list = []
    for data in all_data:
        data_list.append({'device_name': data.device_name, 'data': data.data, 'timestamp': data.timestamp})
    
    return jsonify(data_list)

if __name__ == '__main__':
    with app.app_context():
        db.create_all()  # Tworzenie tabeli w bazie danych, jeśli nie istnieje
    app.run(debug=True)



Typy danych

Integeran integer
String(size)a string with a maximum length (optional in some databases, e.g. PostgreSQL)
Textsome longer unicode text
DateTimedate and time expressed as Python datetime object.
Floatstores floating point values
Booleanstores a boolean value
PickleTypestores a pickled Python object
LargeBinarystores large arbitrary binary data

Dodaj komentarz