mysql-connector python 'IN' operator stored as list
Question:
I am using mysql-connector with python and have a query like this:
SELECT avg(downloadtime) FROM tb_npp where date(date) between %s and %s and host like %s",(s_date,e_date,"%" + dc + "%")
NOw, if my variable ‘dc’ is a list like this:
dc = ['sjc','iad','las']
Then I have a mysql query like below:
SELECT avg(downloadtime) FROM tb_npp where date(date) = '2013-07-01' and substring(host,6,3) in ('sjc','las');
My question is, how do I write this query in my python code which will convert my variable ‘dc’ to a list?
I tried the below query but getting error: Failed processing format-parameters; ‘MySQLConverter’ object has no attribute ‘_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))
Can somebody please tell me what I am doing wrong?
Thanks in advance
Answers:
I’m not familiar with mysql-connector, but its behavior appears to be similar to MySQLdb in this regard. If that’s true, you need to use a bit of string formatting:
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)
As an alternative to @unutbu’s answer which is specific to using mysql-connector:
cursor.execute(
"SELECT thing "
" FROM table "
" WHERE some_col > %(example_param)s "
" AND id IN ({li})".format(li=", ".join(list_of_values)),
params={
"example_param": 33
})
If you try to move the joined list into a param (like example param) it may
complain because mysql-connector interprets the values as strings.
If your list isn’t made up of things that are string-format-able (like integers) by default then in your join statement replace list_of_values
with:
[str(v) for v in list_of_values]
SELECT avg(downloadtime) FROM tb_npp where date(date) = '2013-07-01' and substring(host,6,3) in %s
That’s it, that’s it
I am using mysql-connector with python and have a query like this:
SELECT avg(downloadtime) FROM tb_npp where date(date) between %s and %s and host like %s",(s_date,e_date,"%" + dc + "%")
NOw, if my variable ‘dc’ is a list like this:
dc = ['sjc','iad','las']
Then I have a mysql query like below:
SELECT avg(downloadtime) FROM tb_npp where date(date) = '2013-07-01' and substring(host,6,3) in ('sjc','las');
My question is, how do I write this query in my python code which will convert my variable ‘dc’ to a list?
I tried the below query but getting error: Failed processing format-parameters; ‘MySQLConverter’ object has no attribute ‘_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))
Can somebody please tell me what I am doing wrong?
Thanks in advance
I’m not familiar with mysql-connector, but its behavior appears to be similar to MySQLdb in this regard. If that’s true, you need to use a bit of string formatting:
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)
As an alternative to @unutbu’s answer which is specific to using mysql-connector:
cursor.execute(
"SELECT thing "
" FROM table "
" WHERE some_col > %(example_param)s "
" AND id IN ({li})".format(li=", ".join(list_of_values)),
params={
"example_param": 33
})
If you try to move the joined list into a param (like example param) it may
complain because mysql-connector interprets the values as strings.
If your list isn’t made up of things that are string-format-able (like integers) by default then in your join statement replace list_of_values
with:
[str(v) for v in list_of_values]
SELECT avg(downloadtime) FROM tb_npp where date(date) = '2013-07-01' and substring(host,6,3) in %s
That’s it, that’s it