Вы вставляете кортежи , а не строки;удалите запятые:
sqlMac = c['kismet.device.base.macaddr']
sqlType = c['kismet.device.base.type']
sqlManuf = c['kismet.device.base.manuf']
ktime = c['kismet.device.base.last_time']
sqlTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(ktime))
Это запятая, которая превращает эти выражения в кортежи, а str()
в кортеже дает вам строку Unicode контейнера как представление u'....'
, которое затем конфликтует с '
цитата, которую вы добавляете.
Обратите внимание, что устраняется необходимость в цикле по ktime
!
Далее, вы действительно хотите использовать параметры SQL , а не конкатенацию строк.Используйте заполнители вместо '" + str(...) + "'
и оставьте обработку цитирования для адаптера базы данных:
cur.execute("""
INSERT INTO devices (apID, mac, type, manuf, last_seen)
VALUES (1, %s, %s, %s, %s)
""", (sqlMac, sqlType, sqlManuf, sqlTime))
%s
- это заполнители;в зависимости от вашей конкретной библиотеки MySQL Python, вам может потребоваться вместо этого использовать ?
вопросительные знаки.
Это не только позволит вам не думать о заключении в кавычки, но и устранит серьезную проблему безопасности: загружаемый вами JSON может содержать атаку SQL-инъекции, а параметры SQL - лучший способнейтрализовать этот вектор атаки.