einfach den Namen einer Variablen in einen String Schreiben nicht auf magische Weise seinen Inhalt in der Zeichenfolge erscheinen.
>>> p = 'some part'
>>> s = 'replace p of a string'
>>> s
'replace p of a string'
>>> s = 'replace %s of a string' % p
>>> s
'replace some part of a string'
>>> s = 'replace {} of a string'.format(p)
>>> s
'replace some part of a string'
In Ihrem Fall würde dies bedeuten:
>>> sql = "insert into cust_table (name) values (names) where cust_id IN ('%s')"
>>> ids = ", ".join(id)
>>> cursor.execute(sql % ids)
obwohl ich stark vermuten, dass Sie ein ähnliches Problem mit names
haben.
Um mögliche SQL-Injection-Probleme zu vermeiden, wäre es vorzuziehen, eine "parametrisierte Anweisung" zu verwenden. Dies würde in etwa so aussehen:
>>> sql = 'insert into ... where cust_id IN %s'
>>> cursor.execute(sql, (id,))
Einige Datenbank-Anschlüsse für Python sind dazu in der Lage, aber dein ist wahrscheinlich nicht.
Eine Abhilfe könnte sein, so etwas wie
>>> params = ', '.join(['%s']*len(id))
>>> sql = 'insert into ... where cust_id IN (%s)' % params
>>> cursor.execute(sql, id)
Vorsicht [Bobby Tables] (https://xkcd.com/327/). –
Programmierung ist nicht/durchaus/Magie;) – hop