Вставка строк в postgresql через pyscopg2 - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь вставить некоторые строковые значения в базу данных postgresql.а именно:

macaddress,
timestamp (date time format)
type of device (string)
subtype (string)

пример:

INSERT INTO device (address, tstamp, type, subtype) 
     VALUES ('00:00:00:00','2012-02-22 19:31:26','computer','notebook')

Я использую скрипт python psycopg2 для вывода данных, и появляется следующая ошибка:

c.executemany("INSERT INTO device VALUES (default, '%s','%s','%s','%s')", 
              (mac, date, typedev, subtype,))
TypeError: not all arguments converted during string formatting

Команда, которую я использую для вставки:

c.executemany("INSERT INTO device VALUES (default, '%s','%s','%s','%s')", 
              (mac, date, typedev, subtype,))

1 Ответ

3 голосов
/ 08 марта 2012

Есть несколько проблем:

  1. Вам не нужно заключать в кавычки параметр (%s). Хорошие люди из psycopg2 позаботятся о том, чтобы все было сделано правильно.
  2. executemany() ожидает последовательность параметров .

Итак, поскольку вы вставляете только одну строку, вы можете просто использовать execute():

c.execute("INSERT INTO device VALUES (default,%s,%s,%s,%s)", 
          (mac, date, typedev, subtype,))

Когда вам нужно использовать executemany(), не забудьте передать ему последовательность параметров, например ::

c.executemany("INSERT INTO device VALUES (default,%s,%s,%s,%s)", 
              [(mac, date, typedev, subtype,),])
...