Django:如何在从mysql DB提取数据时使用LIKE

时间:2018-11-15 05:38:14

标签: python mysql django

我需要一种使用Django的LIKE从数据库中获取类似记录的方法。 我的代码是:

def fetchProductsDate1(request):
    query = request.session.get('query')
    date1 = request.session.get('date1')
    db = pymysql.connect(host=host,user=user,passwd=passwd,db=dbName)
    # Create a Cursor object to execute queries.
    cur = db.cursor()
    # Select data from table using SQL query.
    stmt = "SELECT FSN FROM tab WHERE query LIKE '%s' AND DATE(updated_at) LIKE '%s' " % (query.replace("'", r"\'"), date1)
    log.info(stmt)
    cur.execute(stmt)
    rows = cur.fetchall()
    json_data = rows[0][0]

db语句如下:

SELECT num FROM tab WHERE query LIKE 'soch sarees' AND DATE(updated_at) LIKE '2018-11-14'

我希望声明像:

SELECT num FROM tab WHERE query LIKE '%soch sarees%' AND DATE(updated_at) LIKE '2018-11-14'

任何帮助都会非常好:)

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用%%来完成

stmt = "SELECT FSN FROM tab WHERE query LIKE '%%%s%%' AND DATE(updated_at) LIKE '%s' " % (query.replace("'", r"\'"), date1)

哪个会给我们

  

从选项卡中选择FSN,在其中查询类似'%soch sarees%'和DATE(updated_at)类似'2018-11-14'

此外,我认为连接这样的参数是一种不好的做法。这将打开SQL注入的路径

您可以尝试:

select_stmt = "SELECT FSN FROM tab WHERE query LIKE '%%%(name)%%%' AND DATE(updated_at) LIKE '%(date)%'"
cursor.execute(select_stmt, { 'name': 'soch sarees','date':'2018-11-14' })