Escaping chars in Python and sqlite

前端 未结 4 2043
温柔的废话
温柔的废话 2020-12-05 06:21

I have a python script that reads raw movie text files into an sqlite database.

I use re.escape(title) to add escape chars into the strings to make them db safe befo

相关标签:
4条回答
  • 2020-12-05 06:43

    You're doing it wrong. Literally. You should be using parameters, like this:

    c.execute("UPDATE movies SET rating = ? WHERE name = ?", (8.7, "'Allo 'Allo! (1982)"))
    

    Like that, you won't need to do any quoting at all and (if those values are coming from anyone untrusted) you'll be 100% safe (here) from SQL injection attacks too.

    0 讨论(0)
  • 2020-12-05 06:46

    SQLite doesn't support backslash escape sequences. Apostrophes in string literals are indicated by doubling them: '''Allo ''Allo! (1982)'.

    But, like Donal said, you should be using parameters.

    0 讨论(0)
  • 2020-12-05 06:57

    I use re.escape(title) to add escape chars into the strings to make them db safe

    Note that re.escape makes a string re-safe -- nothing to do with making it db safe. Rather, as @Donal says, what you need is the parameter substitution concept of the Python DB API -- that makes things "db safe" as you need.

    0 讨论(0)
  • 2020-12-05 07:08

    I've one simple tip you could use to handle this problem: When your SQL statement string has single quote:', then you could use double quote to enclose your statement string. And when your SQL statement string has double quotes:", then you could use single quote:" to enclose your statement string. E.g.

    sqlString="UPDATE movies SET rating = '8.7' WHERE name='Allo Allo !' (1982 )"
    c.execute(sqlString)
    

    Or,

    sqlString='UPDATE movies SET rating = "8.7" WHERE name="Allo Allo !" (1982 )'
    c.execute(sqlString)
    

    This solution works for me in Python environment.

    0 讨论(0)
提交回复
热议问题