使用MySQLdb处理SQL查询中的多个参数

时间:2016-02-19 02:15:20

标签: python mysql sql mysql-python sql-like

我有一个场景,我需要排除数千个具有特定域名的电子邮件ID。

我当前的查询是

Select * from users where email NOT LIKE '%abc.com' 
                      AND email NOT LIKE '%efg.com'
                      AND email NOT LIKE '%xyz.com'            

当我搬到python时,我写了一个像

这样的查询
MySQLcursor.execute (Select * from users where email NOT LIKE '%abc.com' 
                      AND email NOT LIKE '%efg.com'
                      AND email NOT LIKE '%xyz.com' )

我可以制作一个通用的域列表并将其排除吗?

我尝试的是

list_of_domains = ('%%abc.com','%%xyz.com','%%efg.com')
MySQLcursor.execute (Select * from users where email NOT LIKE %(exclude_domain)s, {"exclude_domain":list_of_domains} )

如果list_of_domains中只有1个值,它似乎有效。因为,当它解压缩列表时,它只能将“email Not Like”条件与1个域列表匹配。

如何制作通用查询,如果明天,如果我有新域名,我只需将其添加到list_of_domains即可。

我不确定是否可能?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我不喜欢使用字符串插值和连接来构造查询,但是,假设您无法更改表模式,这是您必须执行的查询,并且您信任域列表的来源,这里有一些东西可以帮助您开始:

domains = [...]

pattern = "email NOT LIKE '%{0}'"
conditions = " AND ".join([pattern.format(domain) for domain in domains])
query = "SELECT * FROM users WHERE " + conditions