Intrebare python sqlite3

Salutare!
Am o clasa Database care are ca membri 2 functii, una ar trebui sa execute un insert si cealalta ar trebui sa execute un select * all. problema e: pare ca introduce in baza de date…dar nu afiseaza…nu stiu
Clasa e intr-un fisier (backend.py), iar codul care apeleaza functia de insert si view e intr-un alt alt fisier (frontend.py).
cineva care stie ce se intampla?

backend.py

import sqlite3

class Database:
    
    def __init__(self, db):
        conn = sqlite3.connect(db)
        cur = conn.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS ledger1 (id INTEGER PRIMARY KEY, open_price real , high_price real, low_price real, close_price real, rsi real)")
        conn.commit()
        conn.close()
        
    def insert(self, open_price,high_price,low_price,close_price,rsi):
        conn = sqlite3.connect("ledger1.db")
        cur = conn.cursor()
        cur.execute("INSERT INTO ledger1 VALUES (NULL,?,?,?,?,?)", (open_price,high_price,low_price,close_price,rsi))
        conn.commit()
        conn.close()
        
    def view(self):
        conn = sqlite3.connect("ledger1.db")
        cur = conn.cursor()
        cur.execute("SELECT * FROM ledger1")
        conn.commit()
        conn.close()

frontend.py

from backend import Database

database = Database("ledger1.db")
database.insert(1,2,3,4,5)
database.view()

Later edit:
Cam asa arata baza de date

Da inainte un select pe acel tabel si vezi daca ai ceva in el. Asta inainte sa faci ce este mai jos.

Pune chestia asta intr-un try catch si vezi ce exceptie primesti. Asta daca primesti una. Nu am lucrat cu sqlite, dar ceva imi spune ca nu este nevoie de tranzactie la SELECT.

Din ce vad pe aici, ar trebui sa faci ceva cu acel rezultat, lucru pe care nu il vad in codul tau.

Dupa cur.execute("SELECT * FROM ledger1"), ar trebui sa vina si rows = cur.fetchall() si sa intorci rows unde ar trebui sa ai rezultatul selectului.

1 Like

multumesc mult dude. a mers <3

Acum se pare ca a aparut alta eroare…

Am functia asta:

def view(self, table):
        conn = sqlite3.connect("ledger1.db")
        cur = conn.cursor()
        cur.execute("SELECT * FROM ?", (table))
        rows = cur.fetchall()
        return rows
        conn.commit()
        conn.close()

La linia

        cur.execute("SELECT * FROM ?", (table))

da eroarea::

cur.execute(“SELECT * FROM (?)”, (table))
sqlite3.OperationalError: near “?”: syntax error

Help please

Cauta cum se trimite un parametru. Nu stie cine este tabelul. Iti zice asta si in mesajul de eroare

Sau scrie numele tabelului.

In celalalt fisier apelez functia si ii dau numele tabelului cu

from backend import Database

database = Database("ledger1.db")
a = database.view("nume_tabel")
print(a)

Si da eroarea aia

Atunci concateneaza la stringul tau cu select numele tabeluli si vezi daca merge

“SELECT * FROM " + table

1 Like

a mers, sarumana

Mai am o problema…
Am functia asta…
Practic am incercat sa introduc in insert-ul sql prin variabila “table” numele tabelului

    def insert(self, table, open_price, high_price, low_price, close_price):
        from datetime import datetime, timedelta
        rsi = 77
        currenttime = datetime.now()
        conn = sqlite3.connect("ledger1.db")
        cur = conn.cursor()
        cur.execute('INSERT INTO ? VALUES (NULL,?,?,?,?,?,?)', (table, currenttime, open_price, high_price, low_price, close_price, rsi))
        #cur.execute('INSERT INTO ' + table +'VALUES (' + str(currenttime) + ',' + str(open_price) + ',' + str(high_price) + ',' + str(low_price) + ',' + str(close_price) + ',' + str(rsi) +')')
        conn.commit()
        conn.close()

Primesc eroarea: sqlite3.OperationalError: near “?”: syntax error
la linia cu INSERT INTO ? VALUES …
care ar putea fi problema?
multe multumiri

Nu cred că poţi să foloseşti placeholder pentru denumirile de tabele sau coloane.

2 Likes

Este aceasi eroare ca in cazul selctultului si o rezolvi la fel

Nu poti sa trimiti numele tabelului cand folosesti placeholdere, ci doar valorile