Параметризация запросов «SELECT IN (…)»

Я хочу использовать MySQLdb для создания параметризованного запроса, такого как как:

serials = ['0123456', '0123457']
c.execute('''select * from table where key in %s''', (serials,))

Но в итоге в СУБД отправляется следующее:

select * from table where key in ("'0123456'", "'0123457'")

Можно ли создать подобный параметризованный запрос? Или мне нужно зациклить себя и создать набор результатов?

Примечание: executemany (...) здесь не сработает - он вернет только последний результат:

>>> c.executemany('''select * from table where key in (%s)''',
        [ (x,) for x in serials ] )
2L
>>> c.fetchall()
((1, '0123457', 'faketestdata'),)

Окончательное решение, адаптированное на основе умного решения Гарета ответ:

# Assume check above for case where len(serials) == 0
query = '''select * from table where key in ({0})'''.format(
    ','.join(["%s"] * len(serials)))
c.execute(query, tuple(serials)) # tuple() for case where len == 1
5
задан MikeyB 18 November 2010 в 15:36
поделиться