代码之家  ›  专栏  ›  技术社区  ›  Fatih Aktaş Floby

在sqlite3中执行时,如何使用tuple miltiple times中的值

  •  0
  • Fatih Aktaş Floby  · 技术社区  · 8 年前

    我正在尝试使用sqlite3的execute函数来清理我得到的字符串。但是,在我的例子中,我不能这样做,因为我不知道如何多次使用元组中的值。

    我能做的就是,

    cursor.execute("""
                        select *
                        from rides r
                        where r.cno = c.cno
                        and (r.src like '%{0}%'
                        or r.dst like '%{0}%'
                        or e.lcode like '%{0}%'
                        and (r.src like '%{1}%'
                        or l3.address like '%{1}%')
                        and (r.src like '%{2}%'
                        or l1.address like '%{2}%')
                        ;
                        """.format(keywords[0], keywords[1], keywords[2]))
    

    但是,我了解到它对sqlinjection攻击是开放的,因为这里直接使用输入。有没有办法在execute函数的末尾多次使用元组?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Charles Landau    8 年前

    sqlite3将他们的卫生工作放在文档的前面和中心。使用命名占位符样式。

    https://docs.python.org/3/library/sqlite3.html#sqlite3.Cursor.execute

    # This is the qmark style:
    cur.execute("insert into people values (?, ?)", (who, age))
    
    # And this is the named style:
    cur.execute("select * from people where name_last=:who and age=:age", {"who": who, "age": age})
    

    对上一篇文章的回答也可以帮助您形象化修复: https://stackoverflow.com/a/12184247/10553976

    推荐文章