2013-07-25 42 views
4

我使用的MySQL连接器使用Python和有一个像这样的查询:MySQL的连接器蟒蛇“IN”操作符存储列表

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

现在,如果我的变量“DC”是像这样的列表:

dc = ['sjc','iad','las'] 

然后,我有一个MySQL查询象下面这样:

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

我的问题是,如何我在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)) 

有人能告诉我什么,我做错了什么?

在此先感谢

+0

如果你只是不使用python运行查询它工作吗? – Drewdin

+0

是的,查询是正确的 –

回答

8

我不熟悉mysql的连接器,但它的行为似乎是在这方面similar to MySQLdb。如果这是真的,你需要使用一些字符串格式:

sql = """SELECT avg(downloadtime) FROM tb_npp where date(date) = %s 
     and substring(host,6,3) in ({c})""".format(
      c=', '.join(['%s']*len(dc)))  
args = ['2013-07-01'] + dc 
cursor3.execute(sql, args) 
+0

哈.... THANKs很多.. :)它的工作原理,但如果我有很多参数,我可以只是连接他们所有的参数变量像:args = ['2013-07 -01'] + ['2013-07-07'] + dc? –

+1

是或者:'args = ['2013-07-01','2013-07-07'] + dc' – unutbu