mysqlDB を使用しようとしていますが、まったく理解できない問題に遭遇しました。
私の問題は、次の実行ステートメントのテーブル名に集中しています。
これは機能します:
c.execute(u'''insert into AIN0 (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str(date), int(raw), int(formula), 0.1))
これらのどちらも機能しません:
c.execute(u'''insert into %s (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str("AIN0"), str(date), int(raw), int(formula), 0.1))
c.execute(u'''insert into 'AIN0' (Date_Info, Raw_Data, Calculation_Formula, Calculated_Data) values (%s, %s, %s, %s)''',
(str(date), int(raw), int(formula), 0.1))
問題は、動作していないものの両方が同じエラーメッセージになるということです:
ProgrammingError: (1064、「SQL 構文にエラーがあります。''AIN0' (Date_Info、Raw_Data、Calculation_Formula、Calculated_Data) 値 ('2011') の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。行 1")
エラー メッセージでは、文字列補間演算子を使用して挿入した場合でも、AIN0 が一重引用符で囲まれていることに注意してください。念のため、MySQL が何を見ているかを確認するために、動作中のケースで意図的な構文エラーを作成しました。
ProgrammingError: (1064、「SQL 構文にエラーがあります。near を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください」)) AIN0 (Date_Info、Raw_Data、Calculation_Formula、Calculated_Data) の値 ('201'行 1")
案の定、MySQL が正しく動作するものでは、AIN0 が一重引用符で囲まれておらず、それがエラーの原因であると思われます。
文字列補間を使用すると、文字列の前後に単一引用符が挿入されるのはなぜですか? また、それらを停止するにはどうすればよいですか?