2016-02-25 2 views
0
def update_data(self): 

    db = sqlite3.connect("SQLite database") 
    cursor = db.cursor() 
    cursor.execute("""UPDATE Item SET ? = ? WHERE itemid = ? """,(self.field, self.value, self.ID)) 
    db.commit() 
    cursor.close() 

Ошибка указывает на наличие синтаксической ошибки около "?" но я не понимаю, в чем проблема.Почему этот метод класса python не работает? (он использует SQLite3)

Примечание: Это метод класса с полностью определенными атрибутами.

Большое спасибо

+0

Каковы значения self.field, self.value и self.ID? –

+0

Это строки и правильные входные значения. Я проверил значения, просто заменив значения, я бы ввел их с помощью атрибутов, причем значения сами по себе были в пределах выполнения sting, и он сработал. Мне просто нужно работать с атрибутами, а не – Diran

+0

Я думаю, вам придется использовать str.format и проверять ввод, если он поступает из внешнего источника, что-то вроде 'cursor.execute (" "" UPDATE Item SET {} =? WHERE itemid =? "" ".format (self.field, (self.value, self.ID)))' –

ответ

0

? символ не заменяется везде появляется, только там, где выражение может быть помещен. Таким образом, попытка использования ? для имени столбца представляет собой синтаксическую ошибку sqlite3.

Вы можете использовать

query = 'update Item set {} = ? where itemid = ?'.format(self.field) 
cursor.execute(query, (self.value, self.ID)) 

, где, конечно, вам нужно вычистить self.field для атак инъекций.

+0

Большое спасибо, я этого не осознал – Diran

Смежные вопросы