Почему я не могу сделать эту вставку в MYSQL? (Python MySQLdb) - PullRequest
1 голос
/ 16 февраля 2010

Это продолжение вопроса, который я задавал ранее: Почему я не могу вставить в MySQL?

Этот вопрос решил его частично. Сейчас я делаю это на Python, и он не работает: (

cursor.execute("INSERT INTO life(user_id, utm)  values(%s,PointFromWKB(point(%s,%s)))",the_user_id, utm_easting, utm_northing)

Я даже плавал (utm_easting) и плавал (utm_northing)

Редактировать: это ошибка:

execute () принимает не более 3 аргументов (задано 5)

Ответы [ 3 ]

4 голосов
/ 16 февраля 2010

С здесь (pdf) :

После строки оператора аргумент для execute (), предоставить кортеж содержащий значения для привязки заполнители, в порядке они должен появиться в строке. Если у вас есть только одно значение х, укажите его как (х,), чтобы указать одноэлементный кортеж.

ТЛ; др:

cursor.execute("""INSERT INTO life(user_id, utm) 
    values(%s,PointFromWKB(point(%s,%s)))""", 
    (the_user_id, utm_easting, utm_northing))

Редактировать: альтернативно вы можете передать список как второй аргумент execute().

cursor.execute("""INSERT INTO life(user_id, utm) 
    values(%s,PointFromWKB(point(%s,%s)))""", 
    [the_user_id, utm_easting, utm_northing])
1 голос
/ 16 февраля 2010

решаемая. Поставь вокруг меня переменные.

cursor.execute("INSERT INTO life(user_id, utm)  values(%s,PointFromWKB(point(%s,%s)))",(the_user_id, utm_easting, utm_northing))
1 голос
/ 16 февраля 2010

Это может зависеть от того, какой API вы используете для вызовов SQL, но это может быть либо:

a) значения на самом деле не являются строками, и вам нужно заменить% s на соответствующие типы (например,% d для целых чисел?) Или

b) строковые значения должны быть заключены в кавычки следующим образом: values('%s',PointFromWKB(point('%s','%s')))

...