質問編集履歴

1

試したことに追記しました。

2023/11/18 00:46

投稿

tama1422
tama1422

スコア5

test CHANGED
File without changes
test CHANGED
@@ -76,18 +76,31 @@
76
76
  ```
77
77
 
78
78
  ### 試したこと
79
- uuidを文字列型に変換して、下記のsqlで実行するとうまくいきますが、sqlが上記ソースコードの通り、NOT EXISTS含む形だくいきません
79
+ 上記ソースコードのsql, params変数の箇所下記のように修正する正常にインサートされ
80
80
  ```python
81
+ # sqlはNOT EXISTSを使わない形
81
82
  sql = f"""
82
83
  INSERT INTO {SCHEMA}.USER
83
84
  VALUES %s;
84
85
  """
86
+ # paramsはUUID型から文字列型に変更
85
87
  params = [
86
88
  (str(uuid.uuid4()), 'test1'),
87
- (str(uuid.uuid4()), "test2")
89
+ (str(uuid.uuid4()), test2)
88
90
  ]
89
91
  ```
90
- NOT EXISTSを使うSQLだと下記のエラーになります。
92
+ 下記のようなNOT EXISTSを使うSQLだと
93
+ ```python
94
+ sql = f"""
95
+ INSERT INTO {SCHEMA}.USER
96
+ SELECT v.id, v.name
97
+ FROM (VALUES %s) AS v(id, name)
98
+ WHERE NOT EXISTS (
99
+ SELECT 1 FROM {SCHEMA}.USER WHERE name = v.name
100
+ );
101
+ """
102
+ ```
103
+ 下記のようなエラーになります。
91
104
  ```
92
105
  ---------------------------------------------------------------------------
93
106
  DatatypeMismatch Traceback (most recent call last)