antunsimic / digitalnivodomjer

MIT License
1 stars 0 forks source link

Integracija programa i baze podataka u Flask #29

Closed antunsimic closed 2 months ago

antunsimic commented 2 months ago

Rok 25.4. odnosi se na skroz gotovu i funkcionalnu Flask aplikaciju. Da bi se ostavilo dovoljno vremena za popravke koda, prvu verziju (funkcionalnu koliko god je moguće) potrebno je objaviti 24.4.

Potrebno je integrirati bazu podataka i dosada napravljene Python programe u Flask. Za pomoć mogu se pročitati upute ispod na engleskom jeziku. Što se tiče primarnih i stranih ključeva, ER dijagram baze podataka može se naći na OneDrive-u.

Steps to Consolidate Python Programs into Flask

  1. Set Up Flask Framework: Start by setting up the basic structure of a Flask application. This includes creating a main application file (usually app.py or similar) and organizing your project directory appropriately.

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///vodomjeri.db'  # Adjust the path as needed
    db = SQLAlchemy(app)
  2. Organize Code into Modules: Your existing Python programs likely contain functions and classes that perform specific tasks (e.g., parsing files, generating reports, interacting with the database). Organize these into modules that can be imported into your Flask application. For example, you might have:

    • models.py for your database models.
    • utilities.py for utility functions like file parsing.
    • services.py for business logic.
  3. Integrate Database Models: Use SQLAlchemy, which is integrated with Flask via Flask-SQLAlchemy, to define your database models. These models will represent the tables in your SQLite database.

    # models.py
    from . import db
    
    class User(db.Model):
       id = db.Column(db.Integer, primary_key=True)
       username = db.Column(db.String(80), unique=True, nullable=False)
       # Additional fields as needed
  4. Create Application Endpoints: Define routes in your Flask application that will handle different functionalities. For example, an endpoint to upload files, another to generate reports, etc.

    @app.route('/upload', methods=['POST'])
    def upload_file():
       # Logic to handle file upload
       pass
  5. Migrate Core Algorithms: Each core functionality you've developed (e.g., file parsing, report generation) should be adapted into this Flask framework. This might mean:

    • Turning scripts into callable functions that can be triggered by Flask routes.
    • Adapting command-line interfaces to web interfaces.
    • Ensuring that output (e.g., reports) can be returned via web responses or saved directly from web inputs.
  6. Testing: Once integrated, thoroughly test each component to ensure it works within the web context. Use Flask's test client to simulate requests and responses.

  7. Error Handling and Logging: Implement proper error handling and logging within your Flask application to manage and debug issues as they arise.

  8. Documentation: As you consolidate and modify your code, keep documentation updated. This is crucial for maintenance and for new developers who may join your project.

Advantages of Consolidation

This approach not only streamlines your development process but also prepares your project for future enhancements, such as adding user authentication, integrating more complex database relationships, or scaling up to handle more traffic or data.

fmartinkovic commented 2 months ago

Funkcionalnosti implementiramo u Flask da bi se mogle koristiti unutar web aplikacije?

Također, je li SQLAlchemy substitucija za sqlite3 knjižnicu koju smo do sada koristili?

antunsimic commented 2 months ago

Funkcionalnosti implementiramo u Flask da bi se mogle koristiti unutar web aplikacije?

Tako je. Flask ćemo koristiti za backend.

Također, je li SQLAlchemy substitucija za sqlite3 knjižnicu koju smo do sada koristili?

Jest.

Zašto prijeći na SQLAlchemy? Apstrakcija i jednostavnost upotrebe: SQLAlchemy pruža višu razinu apstrakcije za operacije nad bazom podataka. Umjesto pisanja neobrađenih SQL upita, možemo koristiti Python objekte i metode za interakciju sa svojom bazom podataka. To čini kôd čitljivijim i smanjuje vjerojatnost napada SQL injekcijom. Agnosticizam baze podataka: SQLAlchemy omogućuje aplikaciji da uglavnom ne ovisi o bazi podataka. To znači da ako se u budućnosti odlučimo prebaciti sa SQLite na drugi sustav baze podataka kao što je PostgreSQL ili MySQL, prijelaz može biti lakši i može zahtijevati minimalne promjene stvarnog codebase-a. Snažne značajke: SQLAlchemy dolazi sa moćnim značajkama kao što su automatsko upravljanje odnosima, eager i lazy loading i ugrađeno upravljanje transakcijama koje nisu dostupne s bibliotekom sqlite3. Integracija s Flaskom: SQLAlchemy se besprijekorno integrira s Flaskom kroz proširenje Flask-SQLAlchemy. Ova integracija uključuje konfiguracijske pomoćnike i upravljanje kontekstom koji su skrojeni za dobar rad unutar web aplikacija razvijenih s Flaskom.

antunsimic commented 2 months ago

Evo par korisnih linkova, kako koristiti SQLAlchemy

https://towardsdatascience.com/sqlalchemy-python-tutorial-79a577141a91

https://docs.sqlalchemy.org/en/20/

I naravno, chat.openai.com

Ako zaglaviš na nekom problemu, stojim na raspolaganju za konkretna pitanja.

fmartinkovic commented 2 months ago

Što točno dođe REFERENCES "Mujo"("ID_KORISNIK") pri tablici Uplata?

Pitam jer se SQLAlchemy zbog toga ne može spojiti na tu tablicu.

antunsimic commented 2 months ago

Sudeći prema ER dijagramu tablice, to bi trebao biti "Korisnik"("ID_korisnik"). Tablica Uplata ima strani ključ ID_korisnik, to je primarni ključ u tablici Korisnik. Ispravljena baza podataka je postavljena na OneDrive.

fmartinkovic commented 2 months ago

Također, zašto su neki stupci za datume tipa INTEGER ili REAL, ne bi li trebali biti TEXT?

antunsimic commented 2 months ago

Da, trebali bi svi biti TEXT.