相关疑难解决方法(0)

在python MySQLDB IN子句中使用列表

我知道如何将列表映射到字符串:

foostring = ",".join( map(str, list_of_ids) )
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容将该字符串转换为IN子句:

cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))
Run Code Online (Sandbox Code Playgroud)

我需要的是使用MySQLDB安全地完成同样的事情(避免SQL注入).在上面的示例中,因为foostring不作为参数传递来执行,所以它很容易受到攻击.我还必须在mysql库之外引用并转义.

(有一个相关的SO问题,但那里列出的答案要么对MySQLDB不起作用,要么易受SQL注入攻击.)

python mysql

75
推荐指数
2
解决办法
3万
查看次数

mysql-connector python'IN'运算符存储为列表

我正在使用mysql-connector与python并有一个像这样的查询:

SELECT avg(downloadtime) FROM tb_npp where date(date) between %s and %s and host like %s",(s_date,e_date,"%" + dc + "%")
Run Code Online (Sandbox Code Playgroud)

不,如果我的变量'dc'是这样的列表:

 dc = ['sjc','iad','las']
Run Code Online (Sandbox Code Playgroud)

然后我有一个像下面这样的mysql查询:

SELECT avg(downloadtime) FROM tb_npp where date(date) = '2013-07-01' and substring(host,6,3) in ('sjc','las');
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在我的python代码中编写此查询,将我的变量'dc'转换为列表?

我尝试了以下查询,但收到错误:处理格式参数失败; 'MySQLConverter'对象没有属性'_list_to_mysql'

cursor3.execute("SELECT avg(downloadtime) FROM tb_npp where date(date) between %s and %s and substring(host,6,3) in %s",(s_date,e_date,dc))
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?

提前致谢

python mysql mysql-connector

5
推荐指数
1
解决办法
1892
查看次数

Python 列表中的 WHERE IN 子句

我需要在python中将一批参数传递给mysql。这是我的代码:

sql = """ SELECT * from my_table WHERE name IN (%s) AND id=%(Id)s AND puid=%(Puid)s"""

params = {'Id':id,'Puid'  : pid}
in_p=', '.join(list(map(lambda x: '%s', names)))
sql = sql %in_p

cursor.execute(sql, names) #todo: add params to sql clause
Run Code Online (Sandbox Code Playgroud)

问题是我想将名称列表传递给 sql IN 子句,同时我还想将 id 和 puid 作为参数传递给 sql 查询子句。我如何在 python 中实现这些?

python mysql query-parameters

2
推荐指数
1
解决办法
7341
查看次数

标签 统计

mysql ×3

python ×3

mysql-connector ×1

query-parameters ×1