私はPythonでmySQLを使用していないので、あらかじめ用意されたSQL INSERT文を実行しようとすると、プレースホルダー付きPythonのSQLエラー1054「フィールドリストの未知の列」xxxxx
通常の解決策は、バックティックの代わりに引用符を追加することです。挿入された値が見つからない場合は引用符を追加することですが、私はチェックを実行していますcolsとvalsのタプルと私は彼らが単一引用符の中に含まれていることを見ることができるので、私はこのエラーがなぜ発生するのか困惑します。
以下は、私のコードの抜粋です:
for item in cols:
try:
# First add columns if not already present
query = "ALTER TABLE Parameters ADD COLUMN %s VARCHAR(200)" % (str(item))
cursor.execute(query)
connection.commit()
except:
pass
:(ちなみに「colsの」と「ヴァルスは、」私は、列名を追加する最初の文字列:)に重点を置いて、文字列のタプル()
です
は、それから私は、値を追加してみてください:
sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(', '.join(cols), ', '.join(['%s'] * len(cols)));
try:
cursor.execute(sql, vals)
except Exception as e:
print(e)
connection.close()
は時々問題はありませんが、そうでない場合、私はこのエラーを取得する:
(1054, "Unknown column 'ColumnName' in 'field list'")
私のPython文は完全に間違っていますか?プレースホルダはベストプラクティスではありませんか?私はリストが非常に大きいのでプレースホルダを使います。
ここでは、SQL文printのダンプされたバージョンです。
INSERT INTO Parameters (TestID, Dev_Type, Version, MAC, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DayActNxtDateTime, XXXX) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
とエラー:
(1054, "Unknown column 'DayActNxtDateTime' in 'field list'")
変数置換を実行した後にSQLステートメントを出力します。答えが明白でない場合は、その結果を質問に入れます。 –
フィールド名にプレースホルダを使用することはできません。 –
こんにちは@Gordon Linoff、私は実際にそれが機密データであるとしてステートメントを通過することはできませんが、私はこれですでにチェックを実行しています。私は、印刷後のステートメントの例を貼り付けます。 – MikG