2016-11-28 4 views
-2

Ich bin zurück mit einigen Schwierigkeiten ._.
Kann mir jemand helfen? Ich habe Probleme, wenn ich einige Daten in meine Datenbank von Tkinter Entry(Widgets) legen möchte.
Ich habe Tabelle "Buch" in meiner Datenbank, ich möchte einige Daten von tkinter zu meinem Tisch "Buch".
Ich benutze bereits get aber ich bekomme nichts in meinen Programmen kann mir jemand dafür helfen?Erhalte Daten von Tkinter Python zur Datenbank MySQL

Vielen Dank. oh ja, das ist mein Skript ist :)

from tkinter import * 
import mysql.connector as mc 
import tkinter.messagebox as tm 


def put(*args): 
    e_code = i_code.get() 
    e_name = i_name.get() 
    e_price = i_price.get() 
    conn = mc.connect(user="root", password="mypassword", host="localhost", database="book_test") 
    cur = conn.cursor() 
    cur.execute("insert into book(book_code, book_name, book_price) values('"+e_code+"', '"+e_name+"', '"+e_price+"')") 
    conn.close() 



root = Tk() 
root.title("GET DATA") 

mainframe = Frame(root) 
mainframe.pack() 

i_code = IntVar() 
i_name = StringVar() 
i_price = IntVar() 


codeEntry = Entry(mainframe, width=7, textvariable=i_code) 
nameEntry = Entry(mainframe, width=7, textvariable=i_name) 
priceEntry = Entry(mainframe, width=7, textvariable=i_price) 

codeEntry.grid(row=0, column=1) 
nameEntry.grid(row=1, column=1) 
priceEntry.grid(row=2, column=1) 

Label(mainframe, text='Book Code').grid(row=0, column=0) 
Label(mainframe, text='Book Name').grid(row=1, column=0) 
Label(mainframe, text='Book Price').grid(row=2, column=0) 

Button(mainframe, text="Insert", command=put).grid(row=3, column=1) 


root.mainloop() 

ich diese Fehlermeldung erhalten, kann mir jemand helfen? oder gib mir den Hinweis hahaha ._.

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__return self.func(*args)
File "/home/oncom/PycharmProjects/guiProject/fkinggetdata.py", line 13, in put
cur.execute("insert into book(book_code, book_name, book_price) values('"+e_code+"', '"+e_name+"', '"+e_price+"')")
TypeError: Can't convert 'int' object to str implicitly

+0

Es ist nicht klar, was Ihr Problem ist. Erhalten Sie eine Fehlermeldung? – scotty3785

+0

warten, ich werde Versuch und Ausnahme verbergen ..... – Oncom

+0

@ scotty3785 Kumpel Sie können meine redigierte Frage für mehr Informationen überprüfen hehehe -_- danke vor – Oncom

Antwort

3

Sie haben alles in Fehlermeldung.

Sie können String und Zahl nicht verketten. Sie müssen konvertieren Zahl in String str(i_code) und str(i_price) bevor Sie

"... values('" + str(e_code) + "', '" + e_name + "', '" + str(e_price) + "')" 

verketten Aber Sie sollten mit Werten als zweites Argument

cur.execute("INSERT INTO book(book_code, book_name, book_price) VALUES('?', '?', '?')", (e_code, e_name, e_price)) 

Es wird bevorzugt Methode ? in SQL-Abfrage und Tupel verwenden. Es verhindert die SQL-Injektion.

+0

Verwenden Sie? ist der richtige Weg, es zu tun. PS du hast einen Tippfehler, der sollte WERTE sein. – scotty3785

+0

@ scotty3785 Ja, Tippfehler, wenn ich in Großbuchstaben umwandelbar mache :) – furas

+0

@furas danke Kumpel für deine Antwort, aber in meiner Tabelle Buch es immer noch leer, wenn ich str (e_code) aber wenn ich Werte ('? ','? ','? ') Ich habe den Fehler' Nicht alle Parameter wurden in der SQL-Anweisung verwendet '. oh yeah in meinem Tabellenbuch, book_code ist int auto_increment, book_name ist varchar und Buchpreis ist int ._. Weißt du, was passiert ist, während ich + str (e_code) + keinen Fehler benutze, aber meine Tabelle noch leer ist --_- Danke ;;) – Oncom

Verwandte Themen