如何用Python打印SQL语句

2024-09-27 02:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我声明了从tkinter Entrys获得的变量,并使用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)

但这对我不管用


Tags: andfromexecutegetwhereselectcursorlike
1条回答
网友
1楼 · 发布于 2024-09-27 02:15:45

不应使用简单的字符串格式来构造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())

相关问题 更多 >

    热门问题