最初のタイプ:文字列のスプライシングで問題を解決できますが、SQLインジェクションを回避するために、このように記述することはお勧めしません。
2番目の関数を見てみましょう:.format()関数を使用します。この関数を使用してsqlをパラメーター化することがよくあります。
例えば:
select * from XX where id in (1,2,3)
次の値をパラメータ化します。
select * from XX where id in ({}).format(‘1,2,3’)
印刷して確認できます。元のSQLとまったく同じです。
補足知識:pythonおよび [** mysql **](https://cloud.tencent.com/product/cdb?from=10680)相互作用/ローカル構成ファイルの読み取り/相互作用エラーレポート
ローカル構成ファイルを読み取ってmysql接続を自分で書き込む場合は、次の点に注意する必要があります。
構成ファイルconfig.iniに書き込みます。
[ sql]
ip = xxx
port = xxx
table = xxx
uname = xxx
passwd = xxx
例:test.pyファイル
# 最初にインポート
import pymysql
# これは、構成ファイルのコンテンツを取得するためのものです
host = conf.get('sql','ip')
port = conf.get('sql','port')
database = conf.get('sql','table'),
user = conf.get('sql','uname')
password = conf.get('sql','passwd')
# mysqlデータベース接続を確立します
conn = pymysql.connect(host=host, port=port, db=database, user=user, password=password, charset='utf8') #エラーがあるかもしれないことに注意してください、後で言います
sql ='xxx' #sqlステートメント
cs1 = conn.cursor() #実行オブジェクトを作成する
count = cs1.execute(sql) #SQLステートメントを実行します。戻り値は、データベースで影響を受け、カウントに割り当てられた行の数です。
conn.commit() #データベースの変更を送信する
cs1.close() #実行オブジェクトを閉じる
conn.close() #データベース接続オブジェクトを閉じます
エラー:
can only concatenate tuple (not “bytes”) to tuple
これは、構成ファイルで読み取られた特定の結果が配列であるためです。それを印刷すると、次のことがわかります。
しかし、最後のpython読み取り構成ファイルで、最初の[global]を読み取ろうとしましたが、配列形式がありません。これがなぜなのかわかりません。メッセージを残して、一緒に通信することを歓迎します。
[ Errno 11004] getaddrinfoが失敗し、次の
django.db.utils.OperationalError:(2003、「MySQLサーバーに接続できません」)djangoがmysqlを操作するときのエラー:
ローカル構成ファイルを参照するときにエラーが報告された場合、このエラーは構成ファイルの読み取り時にも問題になる可能性があります。
あなたはこのようにそれを解決しようとすることができます:
ローカルのツールまたはコマンドを使用するか、接続を試みます。機能しない場合は、ネットワークまたは権限の問題である可能性があります。
上記が可能な場合は、ローカルファイルを読み取る代わりに、別のpythonファイルを直接書き込み、pyファイルに情報を直接書き込みます。操作の結果はOKです。これは、構成ファイルの読み取りの問題です。
次に、読んでみて、読んだ結果を印刷すると、問題を見つけることができます
python mysqlのパラメーター化に関する上記の説明は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。
Recommended Posts