2016-12-13 2 views
0

Я в процессе создания программы python, которую вы можете вводить, редактировать и удалять данные с помощью sqlite. Я знаю, что это, вероятно, основная проблема, но когда я пытаюсь редактировать данные с помощью моих переменных, он выдает ошибку, говорящую, что changename не является столбцом. Любые идеиИспользование переменных для поиска с использованием sql

def userchange(): 
    search = input("please enter a name to search for") 
    changename = input("please enter name to change it to") 
    sql = """UPDATE users SET FirstName = (changename) WHERE FirstName = (search)""" 
    cursor.execute(sql) 
    conn.commit() 
+1

Переменные не заменяются внутри строки. Вы должны использовать подготовленное заявление. – Barmar

ответ

0

Метод execute должен принимать параметры для замены в запросе. https://www.python.org/dev/peps/pep-0249/#id15

Например, если вы используете pyscopg2 было бы как

def userchange(): 
    search = input("please enter a name to search for") 
    changename = input("please enter name to change it to") 
    sql = """UPDATE users SET FirstName = %s WHERE FirstName = %s""" 
    cursor.execute(sql, (search, changeme)) 
    conn.commit() 

http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

Предупреждение Никогда, никогда, НИКОГДА не использовать Python конкатенации (+) или строковые параметры интерполяции (%) для передачи переменных в строку запроса SQL. Даже под дулом пистолета. - pyscopg2 документы

1

спасибо за помощь в конце концов, я нашел, что этот метод работает лучше

def edituser(self): 
    search = self.entryVariable9.get() 
    search1 = self.entryVariable10.get() 
    changename = self.entryVariable11.get() 
    cursor.execute("""UPDATE users SET FirstName = ? WHERE FirstName = ? AND Secondname = ?""", (changename, search, search1)) 
    conn.commit() 
Смежные вопросы