質問: "INSERT INTO %s (filename, data1, data2) VALUES(%s, %s ,%s);" % (tablename, filename, indata1, indata2) cur.execute(sql) ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: 質問に記載されている書き方だと、変数`sql`でクエリが構築し終わっていていて、`test`という**カラム**を見に行こうとしてしまっているのだと思います。 対応としては2個をほど挙げられます。 * 1. `sql`の元の時点で,`'`を使って明示的に文字列になるようにする * 2. クエリにプレースホルダーを用いて後から変数として渡す 1.の例 ``` sql = "INSERT INTO %s (filename, data1, data2) VALUES('%s', '%s' ,'%s');" % (tablename, filename, indata1, indata2) cur.execute(sql) ``` こうすることで、`'test'`という**文字列**を渡せます 2. の例 psycopg2 だと、以下のような形でプレースホルダーを扱えるみたいです。 ``` sql = "INSERT INTO TEST_TABLE (filename, data1, data2) VALUES(%s, %s ,%s);" cur.execute(sql, (filename, indata1, indata2)) ```