2016-12-13 3 views
0

私は、sqliteを使ってデータを入力、編集、削除できるpythonプログラムを作成中です。私はこれがおそらく基本的な問題だと知っていますが、変数を使ってデータを編集しようとすると、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

実行メソッドは、クエリに置き換えるパラメータを受け入れる必要があります。 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

警告決して、決して、NEVER 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() 
関連する問題