如何使用Python打印出SQL语句

时间:2018-11-04 10:57:16

标签: python mysql

我已经声明了从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)

但这对我不起作用

1 个答案:

答案 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())