Python e sqlite3 (scrivere sul database)

di il
3 risposte

Python e sqlite3 (scrivere sul database)

Spiegazione veloce del seguente programma:

- creo un file con estensione .db sul desktop
- mi collego al file .db
- creo la tabella students
- faccio 4 insert
- stampo con il comando "show" la select
- ordino per nome il database

import sqlite3, os

def connect(database):
    connessione = sqlite3.connect(database)
    cursore = connessione.cursor()
    return connessione, cursore

database = "students.db"
file = os.path.join(os.getcwd(), database)
if os.path.exists(file):
    os.remove(file)

db = open(file, "w")
db.close()



conn, c = connect(database)
c.execute("CREATE TABLE IF NOT EXISTS students(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, surname VARCHAR, years INT)")

c.execute('INSERT INTO students(id, name, surname, years) VALUES(10, "fabio", "raimondo", 45)')
c.execute('INSERT INTO students(id, name, surname, years) VALUES(12, "luca", "vinali", 23)')
c.execute('INSERT INTO students(id, name, surname, years) VALUES(5, "tiziano", "rovigo", 31)')
c.execute('INSERT INTO students(id, name, surname, years) VALUES(3, "daniel", "icaro", 23)')

print("\nstudent registration completed.")

while True:
    
    operation = input("> ")
    operation = operation.lower()
        
    if operation == "show":
        for student in c.execute("SELECT * FROM students"):
            print(student)
            
    elif operation == "order":
        registro = c.execute("SELECT * FROM students ORDER BY name ASC")
        c.execute("DELETE FROM students WHERE id > 0")
        for studente in registro:
            print(studente)
            c.execute("INSERT INTO students(id, name, surname, years) VALUES({}, '{}', '{}', {})".format(*studente))
        print("alphabetical ordering carried out.")

    else:
        print("error.")
        

il problema sorge quando cerco di ordinare il database per nome e poi a stampare la select

OUTPUT :
student registration completed.

> show
(3, 'daniel', 'icaro', 23)
(5, 'tiziano', 'rovigo', 31)
(10, 'fabio', 'raimondo', 45)
(12, 'luca', 'vinali', 23)

> order
(3, 'daniel', 'icaro', 23)
(10, 'fabio', 'raimondo', 45)
(12, 'luca', 'vinali', 23)
(5, 'tiziano', 'rovigo', 31)
alphabetical ordering carried out.

> show
(3, 'daniel', 'icaro', 23)
(5, 'tiziano', 'rovigo', 31)
(10, 'fabio', 'raimondo', 45)
(12, 'luca', 'vinali', 23)

> _
purtroppo a quanto pare non mi ha riordinato il database come volevo sapreste dirmi il perchè? grazie mille

3 Risposte

  • Re: Python e sqlite3 (scrivere sul database)

    Non e' mica chiaro che cosa vuoi ottenere.

    la "show" funziona correttamente
    la "order" PURE, il problema e'che SUBITO DOPO cancelli l'intero contenuto della tabella e perche' lo fai lo sai solo tu.

    Comunque: daniel < fabio < luca < tiziano e GIA' FUNZIONA con la PRIMA lettera!

    FORSE quello che ti aspettavi di otterene e' che venisse ordinato IL CONTENUTO della tabella,NON solotanto il risutato della SELECT.

    OVVIAMENTE cio' NON AVVIENE perche' non e' cosi che si fa.

    A ""stima"" direi che PRIMA di pasticciare con i database, ti dovresti studiare ""teoria relazionale dei dati"" e "Structured Query Language".
  • Re: Python e sqlite3 (scrivere sul database)

    Guarda che c'è anche l'output nel caso non mi fossi spiegato correttamente perchè quel che ho detto è
    1. il problema sorge quando cerco di ORDINARE IL DATABASE PER NOME (non stampare la select order by) ORDINARE IL DATABASE e poi (E POI) a stampare la select (risposta tua: non è mica chiaro che cosa vuoi ottenere (O-KAPPA!))
    2. a quanto pare non mi ha riordinato il database
    3. sapreste dirmi il perchè?
    (risposta tua: non è cosi che si fa (forse per questo sono qui) o addirittura: (la "show" funziona correttamente la "order" PURE (VA BENE!)))
    COMUNQUE ora vado a studiarmi mattoni di libri sulla teoria relazionale dei dati e Structured Query Language
    per riordinare per nome una semplice tabella (LOL) grazie! =)
  • Re: Python e sqlite3 (scrivere sul database)

    Le tabelle di SQL non sono né ordinate né ordinabili (e, per quanto ne sappia io, nessun SQL engine ha una funzione che ordina la tabella FISICA).
    Se vuoi una tabella ordinata, puoi fare appunto una SELECT ... ORDER BY ... , ma ti verrà ordinato solo l'output della select. Teoricamente potresti copiare la SELECT ordinata in un'altra tabella temporanea e poi riscrivere sulla vecchia tabella, ma nessuno potrà mai garantire che l'SQL engine rispetterà l'ordine in cui inserisci i dati.
Devi accedere o registrarti per scrivere nel forum
3 risposte