title: python- sqlite3.OperationalError: near ",": syntax error"
body: <p>This isn't my code; I got it from <a href="https://www.youtube.com/channel/UC4KX0hatvRrOVy_D0nPlusg" rel="nofollow noreferrer">https://www.youtube.com/channel/UC4KX0hatvRrOVy_D0nPlusg</a>. The author didn't have the source code so I just had to type it up from the video. His worked fine but I kept getting this error:</p>
  
  <pre class="lang-none prettyprint-override"><code>File "D:\ProgramDevelopment\Python\Project\Python_GUI_IDEL\PythonDatabaseYoutube.py", line 45, in run_query
  query_result= cursor.execute(query,parameters)
  sqlite3.OperationalError: near ",": syntax error" 
  </code></pre>
  
  <p>Link in github: <a href="https://github.com/ahmed-aya/Python_database/blob/master/Python_Database" rel="nofollow noreferrer">https://github.com/ahmed-aya/Python_database/blob/master/Python_Database</a></p>
  
  <pre><code>from tkinter import *
  from tkinter import ttk
  import sqlite3
  
  class Product(object):
  
    def __init__(self,wind):
      self.wind=wind
      self.wind.title('IT products')
  
      frame = LabelFrame (self.wind,text= 'Add new record')
      frame.grid (row=0,column=1)
  
      Label(frame,text='Name:').grid(row=1,column=1)
      self.name =Entry(frame)
      self.name.grid(row=1,column=2)
  
      Label(frame,text='Price:').grid(row=2,column=1)
      self.price =Entry(frame)
      self.price.grid(row=2,column=2)
  
      ttk.Button(frame,text='Add record',command=self.adding).grid(row=3,column=2)
      self.message=Label(text='',fg='red')
      self.message.grid(row=3,column=0)
  
      self.tree=ttk.Treeview(height=10,column=2)
      self.tree.grid(row=4,column=0,columnspan=2)
      self.tree.heading('#0',text='Name',anchor=W)
      self.tree.heading(2,text='Price',anchor=W)
  
      ttk.Button(text='Delete record',command=self.deleting).grid(row=5,column=0)
      ttk.Button(text='Edit record',command=self.editing).grid(row=5,column=1)
  
      self.viewing_records()
  
    def run_query (self, query, parameters=()):
      with sqlite3.connect('database.db') as conn:
          cursor = conn.cursor()
          query_result= cursor.execute(query,parameters)
          conn.commit()
      return query_result
  
    def viewing_records(self):
      records = self.tree.get_children()
      for element in records:
          self.tree.delete(element)
      query ='SELECT * FROM product ORDER BY name DESC'
      db_rows = self.run_query (query)
      for row in db_rows:
          self.tree.insert('',0,text=row[1], values = row[2])
  
    def validation (self):
      return len (self.name.get()) !=0 and len (self.price.get()) !=0
  
    def adding (self):
      if self.validation():
          query ='INSERT INTO product  VALUES (NULL,?,?)'
          parameters =(self.name.get(),self.price.get())
          self.run_query(query,parameters)
          self.message ['text'] = 'Record {} added'.format (self.name.get())
          self.name.delete(0,END)
          self.price.delete(0,END)
      else:
          self.message['text']='name field or price is empty'
      self.viewing_records()
  
    def deleting (self):
      self.message['text']=''
      try:
          self.tree.item (self.tree.selection())['text']
      except IndexError as e:
          self.message['text']='Please, select recoard'
          return
  
      self.message['text']=''
      name=self.tree.item (self.tree.selection())['text']
      query='DELETE FROM product WHERE name=?'
      self.run_query(query,(name,))
      self.message['text']='Record {} deleted.'.format(name)
      self.viewing_records()
  
    def editing(self):
      self.message['text']=""
      try:
          self.tree.item (self.tree.selection())['values'][0]
      except IndexError as e:
          self.message['text']='Please select record'
          return
      name = self.tree.item (self.tree.selection())['text']
      old_price = self.tree.item (self.tree.selection())['values'][0]
  
      self.edit_wind= Toplevel()
      self.edit_wind.title('Edit Window')
  
      Label (self.edit_wind,text='Old name: ').grid(row=0,column=1)
      Entry (self.edit_wind,textvariable=StringVar(self.edit_wind,value=name),state='readonly').grid(row=0,column=2)
      Label (self.edit_wind,text='New name: ').grid(row=1,column=1)
      new_name = Entry(self.edit_wind)
      new_name.grid(row=1,column=2)
  
      Label (self.edit_wind,text='Old price: ').grid(row=2,column=1)
      Entry (self.edit_wind,textvariable = DoubleVar(self.edit_wind,value=old_price),state='readonly').grid(row=2,column=2)
      Label (self.edit_wind,text='New price: ').grid(row=3,column=1)
      new_price=Entry(self.edit_wind)
      new_price.grid(row=3,column=2)
  
      Button(self.edit_wind,text='save changes', command=lambda:self.edit_records(new_name.get(),name,new_price.get(),old_price)).grid(row=4,column=2,sticky=W)
      self.edit_wind.mainloop()
  
    def edit_records(self, new_name,name,new_price,old_price):
      query = 'UPDATE product SET name=?,price,=? WHERE name=? AND price =?'
      parameters = (new_name,new_price,name,old_price)
      self.run_query (query,parameters)
      self.edit_wind.destroy()
      self.message['text']='Record {} changed.'.format(name)
      self.viewing_records()
  
  if __name__== '__main__':
      wind=Tk()
      application = Product(wind)
      wind.mainloop()
  </code></pre>