Topic: sqlite3.OperationalError: no such table: snake  (Letto 149 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
sqlite3.OperationalError: no such table: snake
« il: Dicembre 29, 2019, 20:28 »
buona sera a tutti, come da titolo,durante l esecuzione di uno script  il terminale restituisce questo codice di errore:

sqlite3.OperationalError: no such table: snake


lo script è questo:
import sqlite3

def snakedata():
    con= sqlite3.connect("snake.db")
    cur = con.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS snake (id INTEGER PRIMARY KEY, snakeID text, snakeSpecies text, snakeAge text, snakeGender text, snakeWeight text)")
    con.commit()
    con.close()

non riesco a capire perchè non genera la tavola, creando eccezzione ad ogni interazione una volta lanciato...il file snake.db viene creato nella stessa cartella in cui ci sono gli file.py contenenti gli script ma all interno vmriaukta vuoto, si crea il file.db ma all interno non crea la tabella
premetto che sono alle primissime armi e ringrazio anticipatamente chi avrà la pazienza di aiutarmi nel risolvere questo problema.
« Ultima modifica: Dicembre 29, 2019, 23:01 da bambam »

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 162
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #1 il: Dicembre 30, 2019, 08:56 »
La funzione snakedata() è corretta, tant'è che replicandola da shell funziona, questa e la sessione di shell
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import sqlite3
>>> def snakedata():
conn = sqlite3.connect('snake.db')
cur = conn.cursor()
query = '''
CREATE TABLE IF NOT EXISTS snake (id INTEGER PRIMARY KEY,
                                  snakeID text,
                                  snakeSpecies text,
                                  snakeAge text,
                                  snakeGender text,
                                  snakeWeight text)
'''
cur.execute(query)
conn.commit()
conn.close()


>>> snakedata()
>>> query = 'INSERT INTO snake VALUES(1, "crota", "Crotalo", "20", "Serpente a sonagli", "5")'
>>> conn = sqlite3.connect('snake.db')
>>> conn.execute(query)
<sqlite3.Cursor object at 0x7f771c145ab0>
>>> conn.commit()
>>> conn.close()


e questa una sessione di terminale avviata, per verifica, immediatamente dopo aver creato la tavola e prima dell'inserimento dei dati e chiusa dopo
NzP:~$ sqlite3 snake.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .tables
snake
sqlite> .schema [snake]
sqlite> .schema snake
CREATE TABLE snake (id INTEGER PRIMARY KEY,
                                  snakeID text,
                                  snakeSpecies text,
                                  snakeAge text,
                                  snakeGender text,
                                  snakeWeight text);
sqlite> SELECT * FROM snake;
sqlite> SELECT * FROM snake;
1|crota|Crotalo|20|Serpente a sonagli|5
sqlite>


Il fatto che Ti venga segnalato l'inesistenza della tavola nello script, probabilmente dipende da una mancata o affrettata invocazione della funzione "snakedata()" nel resto dello script, che non hai indicato.
Ritengo Tu debba, per prima cosa, controllare la logica del flusso dello script (l'algoritmo, in sostanza).

Ciao :)

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #2 il: Dicembre 30, 2019, 09:31 »
grazie mille, ho provato a ricontrollare lo script ma la funzione snake data() non viene richiamata esplicitamente e mi trovo parecchio in difficoltà , provo ad allegare il codice con la speranza che sia possibile individuare la falla...
ps:probabilmente ci saranno altri errori ma principalmente mi sto concentrando su cio che blocca l esecuzione delle altre funzione dello scrpit per testarlo a pieno ...

la backend :
#backend
import sqlite3


   

def snakedata():
    con = sqlite3.connect("snake.db")
    cur = con.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS snake (id INTEGER PRIMARY KEY, snakeID text, snakeSpecies text, snakeAge text, snakeGender text, snakeWeight text)")
    con.commit()
    con.close()

def addsnakerec(snakeID , snakeSpecies , snakeAge , snakeGender ,snakeWeight):
    con =sqlite3.connect("snake.db")
    cur = con.cursor()
    cur.execute("INSERT INTO snake VALUES (NULL,?,?,?,?,?)",(snakeID, snakeSpecies, snakeAge, snakeGender,snakeWeight))
    con.commit()
    con.close()

def viewsnakeData():     
    con =sqlite3.connect("snake.db")
    cur =con.cursor()
    cur.execute("SELECT * FROM  snake")
    row =cur.fetchall() 
    con.close
    return rows


def deletesnakerec(id):
    con =sqlite3.connect("snake.db")
    cur =con.cursor()
    cur.execute("DELETE  FROM  snake WHERE id=?",(id,))
    con.commit()
    con.close

#=====consultare x console database
def SearchDataSnake(snakeID="" , snakeSpecies="" , snakeAge="" , snakeGender="" ,snakeWeight=""):
    con=sqlite3.connect("snake.db")
    cur =con.cursor()
    cur.execute("SELECT * FROM  snake WHERE snakeID=? OR snakeSpecies=? OR snakeAge=? OR snakeGender=? OR snakeWeight=? ", (snakeSpecies , snakeAge , snakeGender ,snakeWeight))
    row =cur.fetchall()
    con.close()
    return rows

def datasnakeUpdate(id, snakeID="" ,snakeSpecies="" , snakeAge="" , snakeGender="" ,snakeWeight=""):
    con=sqlite3.connect("snake.db")
    cur = con.cursor()
    cur.execute(" UPDATE snake SET snakeID=?, snakeSpecies=? , snakeAge=? , snakeGender=? , snakeWeight=? , WHERE id=?",( snakeID , snakeSpecies , snakeAge , snakeGender ,snakeWeight,id)) 
    con.commit()
    con.close()



interfaccia:
[class wild:

   
  def __init__(self,root):
     self.root = root
     self.root.title("Wild Hatch Isle Management")
     self.root.geometry("1350x600+0+0")
     self.root.configure(bg="grey")
     #=======================StringVar serpenti========================
     snakeID = StringVar()
     snakeSpecies = StringVar()
     snakeAge= StringVar()
     snakeGender = StringVar()
     snakeWeight = StringVar()
     #=======================StringVar migali========================
     spiderID = StringVar()
     spiderSpecies = StringVar()
     spiderAge= StringVar()
     spiderGender = StringVar()
     spiderLegspan = StringVar()
     #=======================StringVar  data console ========================
     ID = StringVar()
     DATE = StringVar()


     #================================comandi generali===========================

     def iExit():
         iExit = tkinter.messagebox.askyesno ("Wild Hatch Isle Management","Confirm if you want to exit")
         if iExit > 0:
             root.destroy()
             return
     #================================comandi serpenti===========================
     def clearsnakedata():
         self.txtSnakeID.delete(0,END)
         self.txtSnakeSpecies.delete(0,END)
         self.txtSnakeAge.delete(0,END)
         self.txtSnakeGender.delete(0,END)
         self.txtSnakeWeight.delete(0,END)


     def addsnakedata():
         if (len (snakeID.get())!=0) :
              snakedb_backend.addsnakerec(snakeID.get() , snakeSpecies.get() , snakeAge.get() , snakeGender.get() ,snakeWeight.get())
              SnakeList.delete(0,END)
              SnakeList.insert(END,snakeID.get() , snakeSpecies.get() , snakeAge.get() , snakeGender.get() ,snakeWeight.get())

     def Displaysnakedata():
         SnakeList.delete(0,END)
         for row in snakedb_backend.viewsnakeData():
          SnakeList.insert(END, row, str(""))
         
     def snakerec(event):
         global sd
         searchsnake= SnakeList.curselection()[0]
         sd = SnakeList.get(searchsnake)
         
         self.txtSnakeID.delete(0,END)
         self.txtSnakeID.insert(END,sd[1])
         self.txtSnakeSpecies.delete(0,END)
         self.txtSnakeSpecies.insert(END,sd[2])
         self.txtSnakeAge.delete(0,END)
         self.txtSnakeAge.insert(END,sd[3])
         self.txtSnakeGender.delete(0,END)
         self.txtSnakeGender.insert(END,sd[4])
         self.txtSnakeWeight.delete(0,END)
         self.txtSnakeWeight.insert(END,sd[5])
         
     def deletesnakedata():
         if (len (snakeID.get())!=0) :
              snakedb_backend.deletesnakerec(sd[0])
              clearsnakedata()
              Displaysnakedata()

     def searchsnakedb():
         SnakeList.delete(0,END)
         for row in snakedb_backend.SearchDataSnake(snakeID.get() , snakeSpecies.get() , snakeAge.get() , snakeGender.get() ,snakeWeight.get()):
             SnakeList.insert(END, row, str(""))

     def updatesnake():
         if (len(snakeID.get()) !=0):
             snakedb_backend.deletesnakerec(sd[0])
         if (len(snakeID.get())!=0):
             snakedb_backend.addsnakerec(snakeID.get() , snakeSpecies.get() , snakeAge.get() , snakeGender.get() ,snakeWeight.get())
             SnakeList.delete(0,END)
             SnakeList.insert(END,snakeID.get() , snakeSpecies.get() , snakeAge.get() , snakeGender.get() ,snakeWeight.get())
             

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #3 il: Dicembre 30, 2019, 09:36 »
qui il resto del codice interfaccia



             
   #================================FRAMES===========================
     MainFrame = Frame(self.root,bd=2, width=1300, height=700,padx=2, pady=8, bg="ghost white")
     MainFrame.pack()

     TitoloFrame = Frame (MainFrame,bd=0, padx=3, pady=8, bg="ghost white")
     TitoloFrame.pack(side=TOP)
     #========label del titolo principale======
     self.lblTitolo = Label (TitoloFrame ,font=('arial' ,35,'bold'),text= "Wild Hatch Isle Management", bg="ghost white")
     self.lblTitolo.grid()

     
     #================================FRAMES SERPENTI ===========================
     DataFrame = Frame (MainFrame,bd=1, width=300, height=750,padx=20, pady=20,  bg="grey",relief = RIDGE)
     DataFrame.pack(side=LEFT)
     #=====impaginazione label titolo + finestra input dati serpenti=========     
     DataFrameLEFT =LabelFrame (DataFrame, bd=0, width=400, height=180,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                font=('arial' ,16,'bold'), text="Snakes")
     DataFrameLEFT.pack(side=TOP)
     #====================finestra vuota x spaziare serpenti=======
     DataFrameNULL = Frame (DataFrame, bd=0, width=400, height=10,padx=15, pady=3,  bg="grey")
     DataFrameNULL.pack(side=TOP)
   
     #====impaginazione label snakes list=======
     DataFrameLEFT1 =LabelFrame (DataFrame, bd=0, width=400, height=200,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                 font=('arial' ,16,'bold'), text="SnakesList")
     DataFrameLEFT1.pack(side=BOTTOM)

     #================================FRAMES MIGALI ===========================
     DataFrame1 = Frame (MainFrame,bd=1, width=300, height=750,padx=20, pady=20,  bg="grey",relief = RIDGE)
     DataFrame1.pack(side=RIGHT)
     #=====impaginazione label titolo + finestra input dati migali=========     
     DataFrameRIGHT =LabelFrame (DataFrame1, bd=0, width=400, height=180,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                font=('arial' ,16,'bold'), text="Spiders")
     DataFrameRIGHT.pack(side=TOP)
     #====================finestra vuota x spaziare migali=======
     DataFrameNULL1 = Frame (DataFrame1, bd=0, width=400, height=10,padx=15, pady=3,  bg="grey")
     DataFrameNULL1.pack(side=TOP)
   
     #====impaginazione label migali list=======
     DataFrameRIGHT1 =LabelFrame (DataFrame1, bd=0, width=400, height=200,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                 font=('arial' ,16,'bold'), text="SpidersList")
     DataFrameRIGHT1.pack(side=BOTTOM)
     #================================FRAMES data console ===========================
     DataFrame2 = Frame (MainFrame,bd=1, width=300, height=850,padx=10, pady=10,  bg="grey",relief = RIDGE)
     DataFrame2.pack(side=TOP)
     #=====impaginazione label titolo + finestra input data console=========     
     DataFrameCENTRO =LabelFrame (DataFrame2, bd=0, width=400, height=180,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                font=('arial' ,16,'bold'), text="Data Console")
     DataFrameCENTRO.pack(side=TOP)
     #====================finestra vuota x spaziare data console=======
     DataFrameNULL2 = Frame (DataFrame2, bd=0, width=400, height=10,padx=15, pady=3,  bg="grey")
     DataFrameNULL2.pack(side=TOP)
     
     ButtonFrame = Frame (DataFrame2,bd=2, width=8, height=80,padx=0, pady=0,  bg="ivory3",relief = RIDGE)
     ButtonFrame.pack(side=BOTTOM)

     DataFrameNULL3 = Frame (DataFrame2, bd=0, width=400, height=10,padx=15, pady=3,  bg="grey")
     DataFrameNULL3.pack(side=BOTTOM)

         
     #====impaginazione label data console list=======
     DataFrameCENTRO1 =LabelFrame (DataFrame2, bd=0, width=400, height=200,padx=15, pady=3,  bg="ivory3",relief = RIDGE,
                                 font=('arial' ,16,'bold'), text="Data Console List")
     DataFrameCENTRO1.pack(side=BOTTOM)

     
     #================================label + entry serpenti widget ===========================
     self.lblSnakeID = Label (DataFrameLEFT ,font=('arial' ,10,'bold'),text= "SnakeId:",padx=2, pady=2, bg="ivory3")
     self.lblSnakeID.grid(row=0, column=0, sticky=W)
     self.txtSnakeID = Entry (DataFrameLEFT ,font=('arial' ,10,'bold'),textvariable=snakeID, width=24)
     self.txtSnakeID.grid(row=0, column=1)

     self.lblSnakeSpecies = Label (DataFrameLEFT ,font=('arial' ,10,'bold'),text= "Snake Species:",padx=2, pady=2, bg="ivory3")
     self.lblSnakeSpecies.grid(row=1, column=0, sticky=W)
     self.txtSnakeSpecies = Entry (DataFrameLEFT ,font=('arial' ,10,'bold'),textvariable=snakeSpecies, width=24)
     self.txtSnakeSpecies.grid(row=1, column=1)

     self.lblSnakeGender = Label (DataFrameLEFT ,font=('arial' ,10,'bold'),text= "Snake Gender:",padx=2, pady=2, bg="ivory3")
     self.lblSnakeGender.grid(row=2, column=0, sticky=W)
     self.txtSnakeGender = Entry (DataFrameLEFT ,font=('arial' ,10,'bold'),textvariable=snakeGender, width=24)
     self.txtSnakeGender.grid(row=2, column=1)

     self.lblSnakeAge = Label (DataFrameLEFT ,font=('arial' ,10,'bold'),text= "Snake Age:",padx=2, pady=2, bg="ivory3")
     self.lblSnakeAge.grid(row=3, column=0, sticky=W)
     self.txtSnakeAge = Entry (DataFrameLEFT ,font=('arial' ,10,'bold'),textvariable=snakeAge, width=24)
     self.txtSnakeAge.grid(row=3, column=1)

     self.lblSnakeWeight = Label (DataFrameLEFT ,font=('arial' ,10,'bold'),text= "Snake Weight:",padx=2, pady=2, bg="ivory3")
     self.lblSnakeWeight.grid(row=4, column=0, sticky=W)
     self.txtSnakeWeight = Entry (DataFrameLEFT ,font=('arial' ,10,'bold'),textvariable=snakeWeight, width=24)
     self.txtSnakeWeight.grid(row=4, column=1)

     #================================label + entry migali widget ===========================
     self.lblSpiderID = Label (DataFrameRIGHT ,font=('arial' ,10,'bold'),text= "SpiderId:",padx=2, pady=2, bg="ivory3")
     self.lblSpiderID.grid(row=0, column=0, sticky=W)
     self.txtSpiderID = Entry (DataFrameRIGHT ,font=('arial' ,10,'bold'),textvariable=spiderID, width=24)
     self.txtSpiderID.grid(row=0, column=1)

     self.lblSpiderSpecies = Label (DataFrameRIGHT ,font=('arial' ,10,'bold'),text= "Spider Species:",padx=2, pady=2, bg="ivory3")
     self.lblSpiderSpecies.grid(row=1, column=0, sticky=W)
     self.txtSpiderSpecies = Entry (DataFrameRIGHT ,font=('arial' ,10,'bold'),textvariable=spiderSpecies, width=24)
     self.txtSpiderSpecies.grid(row=1, column=1)

     self.lblSpiderGender = Label (DataFrameRIGHT ,font=('arial' ,10,'bold'),text= "Spider Gender:",padx=2, pady=2, bg="ivory3")
     self.lblSpiderGender.grid(row=2, column=0, sticky=W)
     self.txtSpiderGender = Entry (DataFrameRIGHT ,font=('arial' ,10,'bold'),textvariable=spiderGender, width=24)
     self.txtSpiderGender.grid(row=2, column=1)

     self.lblSpiderAge = Label (DataFrameRIGHT ,font=('arial' ,10,'bold'),text= "Spider Age:",padx=2, pady=2, bg="ivory3")
     self.lblSpiderAge.grid(row=3, column=0, sticky=W)
     self.txtSpiderAge = Entry (DataFrameRIGHT ,font=('arial' ,10,'bold'),textvariable=spiderAge, width=24)
     self.txtSpiderAge.grid(row=3, column=1)

     self.lblSpiderLegspan = Label (DataFrameRIGHT ,font=('arial' ,10,'bold'),text= "SpiderLegspan:",padx=2, pady=2, bg="ivory3")
     self.lblSpiderLegspan.grid(row=4, column=0, sticky=W)
     self.txtSpiderLegspan = Entry (DataFrameRIGHT ,font=('arial' ,10,'bold'),textvariable=spiderLegspan, width=24)
     self.txtSpiderLegspan.grid(row=4, column=1)

     #================================label + entry data console widget ===========================
     self.lblID = Label (DataFrameCENTRO ,font=('arial' ,10,'bold'),text= "Search for ID:",padx=2, pady=2, bg="ivory3")
     self.lblID.grid(row=3, column=0, sticky=W)
     self.txtID = Entry (DataFrameCENTRO ,font=('arial' ,10,'bold'),textvariable=ID, width=24)
     self.txtID.grid(row=3, column=1)

     self.lblDate = Label (DataFrameCENTRO ,font=('arial' ,10,'bold'),text= "Search for Date:",padx=2, pady=2, bg="ivory3")
     self.lblDate.grid(row=4, column=0, sticky=W)
     self.txtDate = Entry (DataFrameCENTRO ,font=('arial' ,10,'bold'),textvariable=DATE, width=24)
     self.txtDate.grid(row=4, column=1)
     
     #================================snakelistbox e scrollbar widget serpenti ===========================

     scrollbar = Scrollbar (DataFrameLEFT1)
     scrollbar.grid(row=0, column=1, sticky='ns')

     SnakeList = Listbox(DataFrameLEFT1, width=37,height=14, font=('arial' ,10,'bold'), yscrollcommand=scrollbar.set)
     SnakeList.bind('<<ListboxSelect>>', snakerec)       
     SnakeList.grid(row=0, column=0, padx=2)
     scrollbar.config(command = SnakeList.yview)
     #================================spiderlistbox e scrollbar widget migali ===========================
     
     scrollbar1 = Scrollbar (DataFrameRIGHT1)
     scrollbar1.grid(row=0, column=1, sticky='ns')

     SpiderList = Listbox(DataFrameRIGHT1, width=37,height=14, font=('arial' ,10,'bold'), yscrollcommand=scrollbar1.set)
     SpiderList.grid(row=0, column=0, padx=2)
     scrollbar1.config(command = SpiderList.yview)
     
#================================data console e scrollbar widget data console ===========================
     scrollbar2 = Scrollbar (DataFrameCENTRO1)
     scrollbar2.grid(row=0, column=1, sticky='ns')

     DataConsoleList = Listbox(DataFrameCENTRO1, width=37,height=14, font=('arial' ,10,'bold'), yscrollcommand=scrollbar2.set)
     DataConsoleList.grid(row=0, column=0, padx=2)
     scrollbar2.config(command =DataConsoleList .yview)

     #================================ bottoni serpenti widget ===========================
   
     self.bottoneAddSnake= Button(DataFrameLEFT, text="Add Snake", font=('arial' ,10,'bold'),height=1, width=10, bd=4, command= addsnakedata)
     self.bottoneAddSnake.grid(row=6, column=0,)

     self.bottoneSearchSnake= Button(DataFrameLEFT, text="Search", font=('arial' ,10,'bold'),height=1, width=10, bd=4, command=searchsnakedb)
     self.bottoneSearchSnake.grid(row=7, column=0,)
     
     #==cancella dati inseriti a db serpenti +cancella dati collegati a id da db comune
     self.bottoneDeleteSnake= Button(DataFrameLEFT, text="Delete", font=('arial' ,10,'bold'),height=1, width=10, bd=4, command=deletesnakedata)
     self.bottoneDeleteSnake.grid(row=6, column=2, sticky=W)

     
     self.bottoneUpdateSnake= Button(DataFrameLEFT, text="Update", font=('arial' ,10,'bold'),height=1, width=10, bd=4,command=updatesnake)
     self.bottoneUpdateSnake.grid(row=7, column=2, sticky=W)

     
     self.bottoneclearSnake= Button(DataFrameLEFT, text="Clear", font=('arial' ,10,'bold'),height=1, width=10, bd=4, command= clearsnakedata)
     self.bottoneclearSnake.grid(row=6, column=1, sticky=W)
     
     self.bottoneDisplaySnake= Button(DataFrameLEFT, text="Display", font=('arial' ,10,'bold'),height=1, width=10, bd=4, command=Displaysnakedata)
     self.bottoneDisplaySnake.grid(row=7, column=1, sticky=W)
     #================================ bottoni migali widget ===========================
     self.bottoneAddSpider= Button(DataFrameRIGHT, text="Add Spider", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneAddSpider.grid(row=6, column=0,)

     self.bottoneSearchSpider= Button(DataFrameRIGHT, text="Search", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSearchSpider.grid(row=7, column=0,)
     
     #==cancella dati inseriti a db migali +cancella dati collegati a id da db comune
     self.bottoneDeleteSpider= Button(DataFrameRIGHT, text="Delete", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneDeleteSpider.grid(row=6, column=2, sticky=W)

     
     self.bottoneUpdateSpider= Button(DataFrameRIGHT, text="Update", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneUpdateSpider.grid(row=7, column=2, sticky=W)
     
     self.bottoneclearSpider= Button(DataFrameRIGHT, text="Clear", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneclearSpider.grid(row=6, column=1, sticky=W)
     
     self.bottoneDisplaySpider= Button(DataFrameRIGHT, text="Display", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneDisplaySpider.grid(row=7, column=1, sticky=W)
     
     #================================ bottoni data console  widget ===========================
     
     self.bottoneADDPASTI= Button(DataFrameCENTRO, text="Add Feed", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneADDPASTI.grid(row=6, column=0,)

     self.bottoneADDMUTE= Button(DataFrameCENTRO, text="Add Moult", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneADDMUTE.grid(row=6, column=1,)
     
     self.bottoneADDACC= Button(DataFrameCENTRO, text="Add Mating", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneADDACC.grid(row=6, column=2,)

     self.bottoneSearchPASTI= Button(DataFrameCENTRO, text="Search Feed", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSearchPASTI.grid(row=7, column=0,)
     
     self.bottoneSearchMUTE= Button(DataFrameCENTRO, text="Search Moult", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSearchMUTE.grid(row=7, column=1,)

     self.bottoneSearchACC= Button(DataFrameCENTRO, text="Search Mating", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSearchACC.grid(row=7, column=2,)

     self.bottoneSearchALL= Button(DataFrameCENTRO, text="Search All", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSearchALL.grid(row=8, column=1,)
     
     #================================ bottoni generali widget ===========================
     
     self.bottoneExit= Button(ButtonFrame, text="Exit", font=('arial' ,10,'bold'),height=1, width=10, bd=4 , command= iExit)
     self.bottoneExit.grid(row=0, column=0,)
     
     self.bottoneBackup= Button(ButtonFrame, text="Backup", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneBackup.grid(row=0, column=1,)

     self.bottoneSave= Button(ButtonFrame, text="Save", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneSave.grid(row=0, column=2,)
     #============bottone per cancellazione dati inferiori ad una data inserita nel database di controllo.=======
     self.bottoneDBcontrol= Button(ButtonFrame, text="Data Control", font=('arial' ,10,'bold'),height=1, width=10, bd=4)
     self.bottoneDBcontrol.grid(row=0, column=3,)
     

if __name__ =='__main__':
    root = Tk()
    application = wild(root)
    root.mainloop()


ad ora ho creato le funzioni  dedicate ad 1/3  dello script ... il resto lo scrivero una volta stabilizzata la prima parte...
grazie ancora e spero davvero possiate aiutarmi ad uscire da questa fase di stallo , 2 giorni che mi scervello senza successo  ;(

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.946
  • Punti reputazione: 9
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #4 il: Dicembre 30, 2019, 11:43 »
Guarda, il tuo codice è... un po' lungo, diciamo... e non ha comunque molto a che vedere con la natura del tuo problema. Certamente, imparare a organizzare il codice meglio e isolare le parti differenti ti aiuterebbe anche a rintracciare l'origine di problemi come questo, ma... sarà per un'altra volta...
Ora, non è che ci sia molto da dire: SE non c'è niente che non va nel pezzo di codice che crea il database (e sembra che non ci sia in effetti nulla di sbagliato, ma controllerei due volte per prudenza), ALLORA può succedere una delle due cose:
1) Se si tratta dello STESSO script che prima crea il database e poi lo utilizza (non è molto chiaro da quello che scrivi), allora può darsi che per qualche ragione il tuo codice chiama una funzione che accede al database PRIMA di chiamare la funzione che crea il database... Purtroppo qui Sqlite ha un comportamento molto sbrigativo... anche se il database in quel momento non esiste ancora, lui non si fa problemi e lo crea al volo. Poi però ovviamente dentro non ci trova la tabella che dovrebbe esserci, e allora crash crash crash.
2) Se invece tu crei il database con uno script differente, e poi fai girare il tuo programma "vero" che usa il database creato in precedenza, allora tieni presente che quando scrivi "connect(snake.db)" usando una path *relativa* (e fai bene a usare una path relativa, ci mancherebbe), la path che usi è relativa alla *directory corrente* che passi allo script al momento di eseguirlo, non alla directory del modulo dello script. Se usi i due script (quello che crea il db e quello che poi vi accede) in tempi diversi con diverse directory correnti... ovviamente la path relativa all'interno non verrà risolta allo stesso modo.

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 162
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #5 il: Dicembre 30, 2019, 12:02 »
Oddio!

 ... al momento non ho il tempo necessario a guardarmi tutto il codice, comunque dovresti provvedere, in primo luogo, a verificare se il database esiste (p.e. con i metodi di "os", e "os.path") e, se esiste, verificare che contenga le tavole necessarie, ciò potresti farlo, posto quanto fatto prima, in questo modo :

>>> conn =  sqlite3.connect('snake.db')
>>> cur = conn.cursor()
>>> query = "SELECT name FROM sqlite_master WHERE type='table'"
>>> cur.execute(query)
<sqlite3.Cursor object at 0x7f60c95c3960>
>>> result = cur.fetchall()
>>> for elem in result:
print(elem)


('snake',)
>>>


Quindi provvedersi, invece del ciclo di stampa, alla verifica delle tavole esistenti, con creazione di quelle necessarie ed assenti.
La cosa potresti farla inserendo una specifica funzione nel modulo di backend della base dati da richiamarsi o prima del mainloop di Tk (processo bloccante) ovvero nello "__init__" di "wild".

Poi, riferendosi al backend dati, vedo continui avvii e chiusure della connessione ... per funzionare, funzionano (credo) ma la faccenda è onerosa per le risorse richieste ... valuta Tu ma personalmente stabilirei e memorizzerei una volta per tutte la connessione all'avvio della applicazione e la passerei quale parametro alle funzioni di gestione dati ... magari, per eventuali fenomeni di time-out, userei accorgimenti come il decoratore indicato in questa pagina ... poi regolati Tu.

In ogni caso, fermarsi un attimo e tornare all'esame della logica dettata dalle esigenze del programma, pianificandole a priori, è sempre bene, principalmente quando ci si inceppa un po', fa risparmiare tempo.

Ciao :)

P.S. - @RicPol ha inserito delle indicazioni sulle quali non posso che concordare, lascio, comunque, inalterato ciò che stavo per inviare.

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #6 il: Gennaio 01, 2020, 12:02 »
Per prima cosa buon anno a tutti! :party: :party: :party:
Ho eseguito i vari test che mi avete consigliato, la funzione non aveva errori e creava la tavola ...probabilmente era un problema di percorsi.
Ho lasciato inalterato lo script inserendo manualmente il file .db nella directory dei moduli , in questo modo il codice gira che una meraviglia ( quasi) :D
Grazie mille per l'aiuto .. ci sono altre cosette che vorrei chiedere ma lo farò in una discussione dedicata.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.946
  • Punti reputazione: 9
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #7 il: Gennaio 01, 2020, 22:47 »
Questo però è un modo per *evitare* il problema, non per *capirlo* e quindi *risolverlo*. Tutto bene, eh? Finché non ti trovi a sbattere la prossima volta contro lo stesso problema... e allora, nuovo post...

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #8 il: Gennaio 02, 2020, 11:59 »
No no , il problema non lo considero risolto in questo modo , é solo un metodo di bypass che mi permette eseguire lo script per verificare dove ci sono altre lacune... Per il problema in questione ho intenzioni di provare con l inserimento di un percorso assoluto per il file.db nella stessa directoryin cui si trovano gli script... Con i codici a dekstop eseguendo crea file.db e tavola senza problemi una volta che sposto gli script nella directory dedicata ed eseguo crea il file.db ma non con le credenziali sqlite3 di conseguenza non riconosce il file e non crea la tavola... Il formato . db é lo stesso ma nel primo caso aprendolo risolve con sqlite3 nell altro caso apre file.db completamente vuoto è anche l icona é differente

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 162
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #9 il: Gennaio 02, 2020, 13:16 »
Comprensibile intenzione, comunque, rischi di girare un po' a vuoto (esperienza diretta ;) )
...Per il problema in questione ho intenzioni di provare con l inserimento di un percorso assoluto per il file.db nella stessa directoryin cui si trovano gli script...

Personalmente, ritengo i "percorsi assoluti" non grandiosi, inizialmente Ti ho indicato di utilizzare le possibilità del modulo "os", tra le altre cose, se li combini con le capacità del modulo "sys", puoi facilmente determinare il percorso in cui viene eseguita l'applicazione, così :
appdir = os.path.abspath(os.path.dirname(sys.argv[0]))

Magari ci sono anche modi migliori, in questa pagina ho scritto come ci sono "arrivato" a quella istruzione (appunto di quando ancora non mi rendevo conto di quanto poco sapessi)

Giusto per toccare con mano, metti questo script in una direttrice e lancialo daterminale quando sei in  un'altra directory
import os
import sqlite3
import sys

appdir = os.path.abspath(os.path.dirname(sys.argv[0]))

def snakedata():
    db_name = os.path.join(appdir, 'data', 'snake.db')
    print(db_name)
    conn = sqlite3.connect(db_name)
    cur = conn.cursor()
    query = '''
            CREATE TABLE IF NOT EXISTS snake (id INTEGER PRIMARY KEY,
                                              snakeID TEXT UNIQUE NOT NULL,
                                              snakeSpecies text,
                                              snakeAge text,
                                              snakeGender text,
                                              snakeWeight text)
            '''
    cur.execute(query)
    conn.commit()
    conn.close()

if __name__ == '__main__':
    conn = sqlite3.connect('snake.db')
    cur = conn.cursor()
    query = '''
            CREATE TABLE IF NOT EXISTS spider (id INTEGER PRIMARY KEY,
                                               spiderID TEXT UNIQUE NOT NULL,
                                               spiderSpecies text,
                                               spiderAge text,
                                               spiderGender text,
                                               spiderWeight text)
            '''
    cur.execute(query)
    conn.commit()
    conn.close()
    snakedata()


Vedrai che verranno creati due database snake, uno nella directory da dove lanci, l'antro in una sotto-directory "data" di quella contenente la Tua applicazione (ritengo improprio mischiare i dati con i files applicativi)

Questa è una sessione di esempio sul mio sistema
NzP:~$ pwd
/home/nuzzopippo/my_tmp/tmp
NzP:~$ tree
.
└── bambam
    ├── data
    └── esempio.py

2 directories, 1 file
NzP:~$ python3 bambam/esempio.py
/home/nuzzopippo/my_tmp/tmp/bambam/data/snake.db
NzP:~$ tree
.
├── bambam
│   ├── data
│   │   └── snake.db
│   └── esempio.py
└── snake.db

2 directories, 3 files
NzP:~$


Ciao

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:sqlite3.OperationalError: no such table: snake
« Risposta #10 il: Gennaio 04, 2020, 10:16 »
ho ascoltato il vostro consiglio e prima di passare oltre mi ci sono messo per risolvere  questo problema.... ho ripassato tutto il codice e,eseguito tutte le verifiche suggerite con il risultato che non creava il file.db all esecuzione dello scrpit principale ma andava a crearlo una volta eseguita  una delle funzioni di inserimento dati, di conseguenza come detto da Ric , sqlite non si faceva problemi, non trovava il file e lo creava di sana pianta non trovando pero la tabella.
ho ricontrollato la 
def__init__  come suggerito da nuzzopippo...
cavolo!! non veniva richiamata la funzione snakedata()
ho corretto inserendola ed ora all esecuzione dello scrpit crea  file.db con annessa tavola.
grazie mille  8) 8)