我已经声明了从tkinter Entry获得的变量,并且使用了MySql连接器。现在,我想知道如何制作一个SQL语句并打印出来。那就是我所知道的:
def suche():
isbn = ISBNE.get()
vnr = VNRE.get()
titel = TitelE.get()
Genre = GenreE.get()
autorvor = AutorE.get()
#cursor.execute("SELECT * FROM bücher WHERE titel LIKE \""+titel+"\" AND
#AutorVorname LIKE \""+autorvor+"\" AND isbn LIKE\""+isbn+"\"")
cursor.execute("SELECT * FROM bücher WHERE titel LIKE '%s'" % titel)
row = cursor.fetchone()
while row!=None:
print(row)
row = cursor.fetchone()
print(isbn)
但这对我不起作用
答案 0 :(得分:0)
您不应使用简单的字符串格式来构造SQL查询字符串。请改用参数化查询:
cursor.execute("SELECT * FROM bücher WHERE titel LIKE %s" , (titel,))
查看相关文档here
其背后的原因是SQL注入,可以在这里找到有趣的解释:https://xkcd.com/327/。 Sql注入很危险,并且可能导致数据库损坏。
基于行的获取和打印数据的描述here:
# Using a while loop cursor.execute("SELECT * FROM employees") row = cursor.fetchone() while row is not None: print(row) row = cursor.fetchone()
未经测试的伪代码:
您可以从每个row
中提取出isbn,vnr,标题,流派并以其他方式存储它们-或将其复制到自己的数据结构中:
def Book:
def __init__(self, isbn,name,vnr,genre):
self.isbn = isbn
self.name = name
self.vnr = vnr
self.genre = genre
def Suche(title):
books = []
cursor.execute("SELECT isbn,name,vnr,genre FROM bücher WHERE titel LIKE %s", (titel,))
row = cursor.fetchone()
while row is not None:
isbn,name,vnr,genre = row
books.append(Book(isbn,name,vnr,genre))
row = cursor.fetchone()
print(books)
return books
# call as:
books = Suche(TitelE.get())