2016-04-06 7 views
1

私はこの問題で多くの問題を抱えており、スタックオーバーフローとWebで答えをチェックしています。私はここでPython 3 - Mysql.connector username = variableの行を削除するにはどうしたらいいですか?

私のコードです(+ [変数] "USERNAME =はどこからDELETE")このステートメントで変数を代用しようとしています:

import mysql.connector as mysql 

global usr_to_rmv 
usr_to_rmv = 'Hoyt' 

global from_table 
from_table = "accounts" 

global from_db 
from_db = "users" 

global from_column 
from_column = "username" 

cnx = mysql.connect(user = 'root', password = 'mag1c1234', 
         host = 'localhost', 
         database = from_db) 

cursor = cnx.cursor() 

# Uncomment to reset new data to 1 
cursor.execute("ALTER TABLE accounts AUTO_INCREMENT = 1") 

removeuser = ("DELETE FROM" + " " + from_table + " " + "WHERE" + " " + from_column + "=" + usr_to_rmv); 

cursor.execute(removeuser) 

query_1 = ("SELECT * FROM accounts"); 
cursor.execute(query_1) 

for row in cursor.fetchall(): 
    print(row) 

cnx.commit() 
cursor.close()     
cnx.close() 

感謝すべてのヘルプ。感謝:)

編集:これは私がmysql.connector.errors.ProgrammingError遭遇していますエラー:1054(42S22):「where句」

+0

どのようなエラーが表示されますか?あなたが特に遭遇している問題は何ですか? – Dresden

+0

通常、文字列はSQLでは一重引用符で囲む必要があります。 –

+0

mysql.connector.errors.ProgrammingError:1054(42S22): 'where句'の 'Hoyt'列が不明です。 –

答えて

0

に不明な列「ホイトを」あなたは、一般的に構築する必要はありませんそのような変数を連結してSQL文を作成し、代わりにparameratized文を使用します。あなたは絶対にあなたが(ちょうどあなた完全に確認することができ、テーブルとカラム名の変数のデータを使用する必要がある場合

sql_delete = "DELETE FROM accounts WHERE username = %s" 
sql_data = (usr_to_remove,) 

cursor.execute(sql_delete, sql_data) 

%sあなたがexecuteに2番目のparamとして渡し、あなたの変数データが​​欲しいプレースホルダ(あります)、データがある正確に何を知っているが、パラメータとしてエスケープしなければならないデータ渡しし続ける:。。

sql_delete = "DELETE FROM " + from_table + " WHERE " + from_column + " = %s" 
sql_data = (usr_to_remove,) 

cursor.execute(sql_delete, sql_data) 

は、より多くの例を参照してくださいhere第2の経路を行く場合にも、あなたがpotential downsidesを理解していることを確認し

+0

完成したプロジェクトでは、変数は入力されます。私はこの方法が動作することを知っていますが、変数を使用する方法を探しています –

+0

別の例を追加しました。 –

+0

コードでこのコードを実行すると、次のエラーが表示されます。mysql.connector.errors.ProgrammingError:1064(42000):SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が1行目の '%s'近くで使用されるようにしてください。 –

関連する問題