Самый быстрый способ сделать DICT одиночную строку через запятую

1

У меня есть список

uids: ['1234','4321','1111'] 

и я хотел бы превратить это в одну строку:

"uid = '1234' OR uid = '4321' OR uid = '1111'"

Какой самый эффективный способ сделать это? Спасибо!

  • 0
    Это для выполнения запроса SQL?
Теги:
string

2 ответа

2
Лучший ответ

Если, как упоминают Майк и Томас в комментариях, вам нужно это для запроса к базе данных, вы должны взять совет Томаса и использовать 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()
# ...
9
' OR '.join("uid = '%s'" % u for u in uids)

Это вызывает функцию join в строке ' OR ', которая принимает список, переданный и помещает строку между каждым элементом, а затем объединяет их все вместе. (Используется для размещения ORs между каждой парой key = val.)

Часть внутри () - это понимание, которое говорит "для каждого u в списке uids, генерирует значение, равное строке "uid = '%s'", но вместо u вместо %s marker".

  • 0
    Я не думаю, что это становится лучше, чем это. +1.
  • 4
    Имейте в виду, что если это для оператора SQL, лучшим подходом является использование цитирования DB-API: put "uid =?" (для параметра qmark qmark) в вашем операторе SQL, по одному для каждого идентификатора пользователя, разделенных OR, как указано выше, и передачи списка идентификаторов (вместе с любыми другими параметрами) в метод execute . Таким образом, вам не придется беспокоиться о правильном цитировании.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню