sql >> Database >  >> RDS >> Mysql

Hoe mysql bijwerken met python waar velden en vermeldingen uit een woordenboek komen?

U wilt geen letterlijke waarden invoeren in string-interpolatie - SQL-injectie-aanvallen zijn geen goede zaak(tm) . In plaats daarvan gebruik je de placeholder-syntaxis die relevant is voor je database (ik denk dat die van MySQL '%s' is).

Opmerking:ik gebruik .format verander hier om % te gebruiken als je wilt, maar ontsnap aan alle %'s

d = {'col1': 'val1', 'col2': 'val2'}
sql = 'UPDATE table SET {}'.format(', '.join('{}=%s'.format(k) for k in d))
print sql
# 'UPDATE table SET col2=%s, col1=%s'

Ervan uitgaande dat cur is een DB-cursor de juiste manier om de query uit te voeren is:

cur.execute(sql, d.values())

Dit werkt omdat, hoewel de volgorde van een woordenboek in feite willekeurige volgorde is, de volgorde van sleutels/waarden van een dictaat consistent zal zijn, zodat dict(zip(d.keys(), d.values())) == d .



  1. Database-ontwerp voor opmerkingen en antwoorden

  2. MariaDB 5.5 upgraden naar MariaDB 10.1 op CentOS/RHEL 7 en Debian-systemen

  3. Room - Gebruik van externe SQLites en interne DB

  4. Een dynamische kruistabelquery uitvoeren