how to safely generate a SQL LIKE statement using python db-api

后端 未结 3 628
悲哀的现实
悲哀的现实 2020-12-06 05:08

I am trying to assemble the following SQL statement using python\'s db-api:

SELECT x FROM myTable WHERE x LIKE \'BEGINNING_OF_STRING%\';

wh

3条回答
  •  时光取名叫无心
    2020-12-06 05:52

    Take note of Sqlite3 documentation:

    Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack.

    Instead, use the DB-API’s parameter substitution. Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method. (Other database modules may use a different placeholder, such as %s or :1.) For example:

    # Never do this -- insecure!
    symbol = 'IBM'
    c.execute("... where symbol = '%s'" % symbol)
    
    # Do this instead
    t = (symbol,)
    c.execute('select * from stocks where symbol=?', t)
    
    # Larger example
    for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
              ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
              ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
             ]:
        c.execute('insert into stocks values (?,?,?,?,?)', t)
    

    I think you want this:

    cursor.execute('SELECT x FROM myTable WHERE x LIKE '%?%', (beginningOfString,) )
    

提交回复
热议问题