使用 MySQLdb 处理 SQL 查询中的多个参数
Handle multiple parameter in SQL query using MySQLdb
我有一个场景需要排除几千个具有特定域名的电子邮件 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 即可正常运行。
我不确定这是否可能?有人可以帮忙吗?
我不喜欢使用字符串插值和连接构建查询,但是,假设您不能更改 table 架构,这是您必须执行的查询并且您信任域列表的来源,这里有一些东西可以让你开始:
domains = [...]
pattern = "email NOT LIKE '%{0}'"
conditions = " AND ".join([pattern.format(domain) for domain in domains])
query = "SELECT * FROM users WHERE " + conditions
我有一个场景需要排除几千个具有特定域名的电子邮件 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 即可正常运行。
我不确定这是否可能?有人可以帮忙吗?
我不喜欢使用字符串插值和连接构建查询,但是,假设您不能更改 table 架构,这是您必须执行的查询并且您信任域列表的来源,这里有一些东西可以让你开始:
domains = [...]
pattern = "email NOT LIKE '%{0}'"
conditions = " AND ".join([pattern.format(domain) for domain in domains])
query = "SELECT * FROM users WHERE " + conditions