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:
- 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.
- 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.
- 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:
- DB Browser for 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
Integer | an integer |
String(size) | a string with a maximum length (optional in some databases, e.g. PostgreSQL) |
Text | some longer unicode text |
DateTime | date and time expressed as Python datetime object. |
Float | stores floating point values |
Boolean | stores a boolean value |
PickleType | stores a pickled Python object |
LargeBinary | stores large arbitrary binary data |