我有一个
列表uids: ['1234','4321','1111']
我想把它变成一个单独的字符串:
"uid = '1234' OR uid = '4321' OR uid = '1111'"
最有效的方法是什么? 谢谢!
答案 0 :(得分:9)
' OR '.join("uid = '%s'" % u for u in uids)
这将调用字符串join
上的' OR '
函数,它接受传入的列表并将字符串放在每个元素之间,然后将它们连接在一起。 (用于将OR放在每个key = val对之间。)
()
中的部分是一个理解,说“对于u
列表中的每个uids
,生成一个等于字符串"uid = '%s'"
的值,但替换为u
代替%s
标记“。
答案 1 :(得分:2)
如果正如迈克和托马斯在评论中提到的那样 - 你需要这个用于数据库查询,你应该听取托马斯的建议并使用the DB-API。
以下是两个例子:
<强>的MySQL 强>
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='u', passwd='p', db='mydb')
curs = conn.cursor()
uids = [1234,4321,1111]
qry = ("""SELECT cheese
FROM cheeseshop
WHERE id IN (%s)""" % ','.join(['%s']*len(uids)))
# 'SELECT cheese FROM cheeseshop WHERE id IN (%s,%s,%s)'
curs.execute(qry, uids)
curs.fetchone()
# ...
<强> SQLite的强>
import sqlite3
conn = sqlite3.connect(':memory:')
curs = conn.cursor()
uids = [1234,4321,1111]
qry = ("""SELECT cheese
FROM cheeseshop
WHERE id IN (%s)""" % ','.join('?'*len(uids)))
# 'SELECT cheese FROM cheeseshop WHERE id IN (?,?,?)'
curs.execute(qry, uids)
curs.fetchone()
# ...