2017-06-14 278 views
0

這不是我的代碼;我從​​得到它。作者沒有源代碼,所以我只需要從視頻中輸入它他的工作很好,但我一直得到這個錯誤:python- sqlite3.OperationalError:near「,」:syntax error「

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" 

Link在github上:https://github.com/ahmed-aya/Python_database/blob/master/Python_Database

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() 
+0

'query ='UPDATE product SET name = ?, price,=?哪裏名字=? AND price =?''和'query ='INSERT INTO product VALUES(NULL,?,?)'似乎是這裏最有可能的罪魁禍首。 – JacobIRR

+0

@JacobIRR def editing_records是每個錯誤出現的地方。在那之前我很好。因爲你說這些是我改變它們的問題。 – user8159480

回答

2

由於你的錯誤說,你有一個錯字

query = 'UPDATE product SET name=?,price,=? WHERE name=? AND price =?' 
             ^extra comma here 
+0

你是我的英雄 – user8159480

+0

@ user8159480很高興幫助。 :)另外,如果此答案已解決您的問題,請點擊複選標記考慮[接受](https://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。 **當然沒有義務這樣做。** – Lafexlos

+0

感謝您的提示 – user8159480