MySQLのPythonコードの操作
#pymysqlモジュールを取り付け
インポートpymysql
コネティカット = pymysql。接続( #のリンクを ホスト = ' localhostの' 、 ユーザ = ' ルート' 、 パスワード = ' 123 ' 、 データベース = ' エゴン' 、 charsetが = ' UTF8 ' #がUTFではありません) -8、バーなし
#方法: カーソル = conn.cursor() #が生成カーソルを、そして完成したが返すデフォルトのタプルに結果セットを表示
#第二の方法:
カーソル = conn.cursor(カーソル= pymysql.cursors.DictCursor) #辞書ウェイ 表示データ
#のキーフィールド値テーブルは、フィールドに対応したテーブル情報である
#の動作3.pymysqlデータベース #が実行SQL文 INPUT =ユーザー(" >>>:" ).strip() PWD = INPUT(" >>> " .strip()) SQL = " のUserInfo WHERE名= SELECT * FROM "%S" とパスワード= 「%S " "%(ユーザー、PWD) #1 注%sは引用符を必要とする 行を =カーソル。実行(SQL) #、SQL文を実行し、戻り値がある、返す SQLクエリ成功したレコード番号 #は、実際のデータを取得するカーソル。fetchone() 、カーソル。fetchAllの() 、カーソル。fetchmany() 、同様のパイプの値は、取得一全て、複数の カーソル。スクロール( 1は、「相対」) #制御カーソルの相対移動が 後進の現在位置データに対して表さ カーソル。スクロール(3、「絶対」) #カーソル制御絶対移動を 表します。データの開始位置に対しては、下位の3つのデータの移動 ()cursor.closeに はconn.close()
SQLインジェクションの問題
手動で照会するSQL文を継ぐないでください!
SQLインジェクションは:あるコメントの使用シンボルは、このようないくつかの操作を示して完了するよう特別な意味を持っています
SQL文を書いた後 、手動で重要なデータをスプライシングしていない
が、ステッチを行うために助けにあなたをexcuteします
が、ステッチを行うために助けにあなたをexcuteします
INPUT =ユーザ名(" >>>:" ).strip() パスワード = INPUT(" >>>:" ).strip() SQL = " SELECT * WHEREユーザー名= '%のS'とパスワード=「S%から' "%(ユーザ名、パスワード) #のユーザー名の正しい ユーザ名>>>:ジェイソン' - jjsakfjjdkjjkjs #のユーザー名とパスワードにない ユーザ名>>>:XXX ' または1 = 1 --asdjkdklqwjdjkjasdljad パスワード>>>:' 「#### CRUDの #による SQL = "ユーザー(ユーザー名、パスワード)の値(%sの%sの)に挿入」 行Cursor.excute =(SQL、(' ジェイソン'、' 123 ' )) #変更 SQL = " アップデートユーザー名= SET 'jasonDSB'。1 ID = " 行 = cursor.excute(SQL) "" " 増加と変更のみを実行excuteは本当にデータには影響しません、あなたが実行する必要がありconn.commitを()本当の追加や変更を完了することができ
ますが、自動的に自動コミット=真>>>提出接続パラメータ設定できるように 「」 "
#ユーザ名= INPUT(「ユーザ名を>>>: ')
#パスワード= INPUT(' >>>パスワード:「)
#= SQL "SELECT * WHEREユーザー名=から%のSおよびパスワード= %S "
#プリント(SQL)
#1 RES = cursor.execute(SQL、(ユーザー名、パスワード)) #は、SQLインジェクションの問題を避けるために特殊記号をフィルタリングし、自動的にあなたを助けることができる
# あなたが代わるん助けるために場所のSQL文の%sを識別し、自動的に実行に応じて# %sの認識のみ
:RESのIF#を
#印刷(カーソル.fetchall())
#他に:
#印刷(「ユーザー名またはパスワード「)
#複数の行の挿入 RESを=カーソル、excutemany(SQL、