2016-07-24 2 views
0

я пытаюсь добавить данные в базе данных (использование psycopg2.connect):TypeError: не все аргументы преобразуются во строку форматирования Postgres

cand = Candidate('test', datetime.now(), '[email protected]', '123123', "21", 'test', 'test', 'test', datetime.now(), "1", "1", 'test', 'M', "18", "2", "2") 
db.addCandidate(cand) 

моя функция дополнит:

def addCandidate(self, candidate): 
    with self.connection.cursor() as cursor: 
     cursor.execute("""INSERT INTO candidate (name, pub_date, email, tel, age, proff, href, city, last_update, called_count, status, comment, sex, recrut_id, vacancy_id, level) 
       VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (candidate.name, candidate.pub_date, candidate.email, candidate.tel, 
          candidate.age, candidate.proff, candidate.href, candidate.city, candidate.last_update, candidate.called_count, candidate.status, candidate.comment, candidate.sex, candidate.recrut_id, 
          candidate.vacancy_id, candidate.level)) 
     self.connection.commit() 

пытался оберточным данные str, но ничего не изменилось. in pymysql.connect хорошо работает

+0

Какие рамки или библиотеку, которую вы используете для подключения к базе данных PostgreSQL? Вы получаете сообщения об ошибках или предупреждения? Что вы подразумеваете под «ничего не изменилось»? Разве содержимое базы данных не было изменено? Попробуйте указать [mcve]. –

+0

mysql и postgres не действуют одинаково. Возможно, одно из ваших значений не является строкой? Распечатайте результат своего заявления sql перед его выполнением. –

+2

Нужно ли цитировать результаты datetime()? –

ответ

0

я решил мою проблему, я написал 15 «% s», вместо 16

0

Я не могу точно сказать, потому что я не знаю типов ваших столбцов, но вполне вероятно, что ваш объект datetime не имеет нужного формата. Вы отправляете объект datetime, а не строку в правильном формате даты. Попробуйте:

candidate.pub_date.isoformat() 

или

candidate.pub_date.strftime("<proper_format">) 

См http://strftime.org/ варианты формата. Это может сработать для вас.

+0

Спасибо, я попробовал, я даже пытался удалить полностью дату в своем заявлении, но я получаю то же самое ошибка – Vladimir

0

В вместо execute сделать mogrify, чтобы проверить, что именно отправляется на сервер:

print cursor.mogrify (""" 
    INSERT INTO candidate ( 
     name, pub_date, email, tel, age, proff, href, city, 
     last_update, called_count, status, comment, 
     sex, recrut_id, vacancy_id, level 
    ) VALUES (
     %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s 
    )""", (
     candidate.name, candidate.pub_date, candidate.email, 
     candidate.tel, candidate.age, candidate.proff, candidate.href, 
     candidate.city, candidate.last_update, candidate.called_count, 
     candidate.status, candidate.comment, candidate.sex, 
     candidate.recrut_id, candidate.vacancy_id, candidate.level 
    ) 
) 
Смежные вопросы