如何使用Python打印SQL语句



我已经声明了从tkinter Entrys获得的Variables,并且我使用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)

但这对我不起作用

您不应该使用简单的字符串格式来构造SQL查询字符串。改为使用参数化查询:

cursor.execute("SELECT * FROM bücher WHERE titel LIKE %s" , (titel,))

请参阅此处的文档

这背后的原因是SQL注入,可以在这里找到一个有趣的解释:https://xkcd.com/327/。Sql注入是危险的,可能会导致数据库损坏。

这里描述了基于行的提取和打印数据:

# 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())

最新更新