如何在sql查询中正确转义%s

时间:2014-08-17 20:12:37

标签: python mysql sql

我有以下sql:

sql = '''SELECT DISTINCT artwork_apple_url FROM main_catalog 
         WHERE (artwork_url IS NULL OR artwork_url NOT LIKE '%s3-%')
           UNION ALL
         SELECT DISTINCT artwork_apple_url FROM main_collectioninstance 
         WHERE (artwork_url IS NULL OR artwork_url NOT LIKE '%s3-%')
      '''
cursor.execute(sql)

这给我一个格式化错误 - 我如何在我的sql中获取LIKE %s3-%'s3是亚马逊网址的一部分。)

2 个答案:

答案 0 :(得分:3)

如果您使用parametrized SQL,则参数的引用将由DB适配器为您完成。它更容易,有助于防止SQL注入。请注意,相应的地标(例如%s)取决于您使用的数据库适配器。 %s适用于MySQLdb,但?是我们的例句所使用的地标符号。

sql = '''SELECT DISTINCT artwork_apple_url FROM main_catalog 
         WHERE (artwork_url IS NULL OR artwork_url NOT LIKE %s)
           UNION ALL
         SELECT DISTINCT artwork_apple_url FROM main_collectioninstance 
         WHERE (artwork_url IS NULL OR artwork_url NOT LIKE %s)
      '''
cursor.execute(sql, ['%s3-%']*2)

答案 1 :(得分:0)

Place a backward slash before each percentage symbol you wish to escape and insert this function on the same line: ESCAPE '\'

从这里开始:http://www.ehow.com/how_8601061_escape-special-character-sql.html?dmsp=manual