如何使用Python在MySQL中搜索记录

时间:2019-01-18 07:12:23

标签: python mysql python-3.x

def search(title="",author="",year="",isbn=""):
    con = mysql.connector.connect(host="localhost", user="root", passwd="junai2104", database="book")
    cur = con.cursor()
    sql_statement = "SELECT * FROM book WHERE title={} or author={} or year={} or isbn={} ".format(title,author,year,isbn)
    cur.execute(sql_statement)
    rows=cur.fetchall()
    con.close()
    return rows    
print(search(title='test2'))

如何使用Python参数在MySQL中搜索值? 如何从参数中获取值?

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题:

  1. 在您的SQL SELECT语句中,您正在文本列(TEXTVARCHAR等)中寻找值。为此,您必须在搜索条件中添加单引号,因为您希望指示文本文字。因此,WHERE title={}应该是WHERE title='{}'(其他参数也一样)。
  2. 当一个或多个参数为空时,您将搜索相应值为空文本的行。因此,在您的示例中,search(title='test2')会触发搜索条目,其中title列的值为'test2'或其他三列(author,{{1} }和year)的文本为空。如果您要查找标题isbn,则只有在其他所有列都不会包含空文本的情况下,此方法才有效。即使这样,由于查询中存在三个'test2'运算符,因此性能也会很差。您应该做的是分别评估每个参数,并仅使用不为空的参数构造查询。
  3. 通过使用格式化字符串构造查询,如果您的搜索参数值来自用户输入,则会造成严重的安全问题。您的代码可以进行SQL注入,这是对系统最简单,最有效的攻击之一。您应该始终parametrize your queries来防止这种攻击。根据一般原则,从不从不通过将字符串及其参数格式化或串联来创建SQL查询。请注意,使用参数化查询时,不是,您只需在第1点中写单引号即可。