2014-10-12 3 views
0

Я пытаюсь вставить некоторые значения в таблицу, и хотя строки создаются, значения не записываются. Вот мой код:Python pymysql INSERT INTO inserting empty values ​​

for i in range(2,6): 
    for team in ul[i]: 
     name = team.string #string from html element 
     print(name) #this works just fine, and prints the desired name 
     cur.execute("INSERT INTO teams (Name) VALUES(name)") 
conn.commit() 

Теперь, если я ставлю VALUES("Test String") вместо этого, он работает, добавляют 30 строк (то, что я хочу), и все с именем: «Test String».

Однако, когда я помещаю в свою переменную name, строки также добавляются, но значения столбца пустые. Столбец, в который я помещаю строки, равен VARCHAR. Есть ли что-то, что я не знаю о том, как интерпретируется оператор SQL в случае строковых переменных Python?

ответ

1

Похоже, что инструкция SQL является простой строкой, и переменная name не вставлена ​​в нее.

Может быть, вы могли бы сделать что-то вроде этого:

sql = """INSERT INTO teams (Name) VALUES({0})""".format(json.dumps(name)) 
cur.execute(sql) 

Я использую json.dumps(myVar), чтобы экранировать специальные символы, например кавычки и т. д., которые могут нарушить инструкцию SQL insert.

Иногда полезно распечатывать инструкцию SQL и пытаться запустить ее в клиенте (например, MySQL Workbench), чтобы узнать, какие изменения необходимы, если они необходимы, для создания синтаксически правильных операторов.

+0

Это работает, спасибо! Я обнаружил, что тип переменной 'name' был' ', поэтому, вероятно, поэтому запрос не распознал его – Tiberiu

+0

Учитывая, что' name' исходит из HTML-формы или чего-то еще например, вы действительно должны использовать параметры запроса для вставки. Форматирование строк открывает возможность для SQL-инъекции. – tuomur