Операторы Python

У меня плохое время с операторами pymysql и python. Однако я мало знаю об операторе python.

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

import pymysql
conn = pymysql.connect(host='127.0.0.1', unix_socket='/Applications/MAMP/tmp/mysql/mysql.sock', user='root', passwd='root', db='db2', charset='utf8')
cur = conn.cursor()
v = (123 , 'foobarfoobar', 'foo', 1241, 3, 132 )
cur.execute("INSERT INTO celebs(num_id, Text, Handle, Followers, RT, Timestamp) VALUES (?,?,?,?,?,?)", v)

Для записи структура mySQL INT (PRI), INT, TEXT, VARCHAR, INT, INT, VARCHAR.

Я запускаю это и получаю TypeError: not all arguments converted during string formatting

Любые подробности, как это решить, и, возможно, некоторое объяснение того, как оператор работает в python. В php проще думаю: $a = 22; echo "$a days";

Обновлять:

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

cur.execute("INSERT INTO celebs (num_id, Text, Handle, Followers, RT, Timestamp) VALUES (123 , 'foobarfoobar', 'foo', 1241, 3, 132 );"  )

person Diolor    schedule 17.06.2013    source источник
comment
v = ('123' , 'foobarfoobar', 'foo', '1241', '3', '132' ) Добавление кавычек вокруг чисел сделает их строками и должно избежать вашей проблемы. docs.python.org/2/library/stdtypes.html   -  person RyPeck    schedule 17.06.2013


Ответы (3)


Согласно исходному коду, paramstyle равен format, поэтому вам нужно изменить...

cur.execute("INSERT INTO ... VALUES (?,?,?,?,?,?)", v)

...to...

cur.execute("INSERT INTO ... VALUES (%s,%s,%s,%s,%s,%s)", v)

Если вы используете механизм хранения транзакций, такой как InnoDB, вам придется явно зафиксировать транзакцию, вызвав conn.commit() после выполнения запроса INSERT.

person Aya    schedule 17.06.2013
comment
К сожалению, я тоже пробовал это, и у меня не получилось. SELECT хотя работает без сбоев. Кроме того, если я запускаю запрос прямо в mySQL со значениями v, они вставляются правильно... Я думаю, что pymysql работает неправильно. Я пытаюсь установить другие разъемы сейчас - person Diolor; 17.06.2013
comment
@ DDL449 Как это не сработало? Вы получили ту же ошибку или что-то еще? - person Aya; 17.06.2013
comment
в скрипте не было ошибки, но он не вставлял значения в БД - person Diolor; 17.06.2013
comment
@DDL449 См. обновленный ответ. Я также заметил, что вы использовали INSERT INTO celebs('num_id', ..., что является недопустимым SQL — должно быть INSERT INTO celebs(num_id, ... - person Aya; 17.06.2013
comment
Правильный. Хотя пробовал и все равно не работает. Я обновил свой ответ своим последним простым запросом, который я пытаюсь вставить - person Diolor; 17.06.2013
comment
@DDL449 DDL449 Разве ты не видел часть, которую я добавил к ответу о conn.commit()? - person Aya; 17.06.2013
comment
Нет. :) Спасибо! Это была недостающая часть! - person Diolor; 17.06.2013

Я думаю, что ошибка в структуре данных v. это должен быть список, а не кортеж

person user2493728    schedule 17.06.2013

Проверьте движок mysql. Pymysql не работает с InnDB, но работает нормально, когда я перешел с InnoDB на MyISAM.

person Faruq Shaik    schedule 05.09.2013