回答編集履歴

4

 

2022/09/25 12:27

投稿

退会済みユーザー
test CHANGED
@@ -21,7 +21,7 @@
21
21
  この部分で、IN の右にある %s が、さきほど作成した stmt_formats (「%s,%s」)に置換されます。
22
22
  ```
23
23
  ・作成されるSQL文
24
- "SELECT name, age, sex FROM info IN %s,%s"
24
+ "SELECT name, age, sex FROM info IN (%s,%s)"
25
25
  ```
26
26
 
27
27
 
@@ -29,7 +29,7 @@
29
29
  db.execute("SELECT name, age, sex FROM info IN (%s)" % stmt_formats, tuple(names))
30
30
  ```
31
31
  execute 関数の第2引数に、タブルを指定することで、プレースホルダに内容が渡されます。
32
- SQL文は、 "SELECT name, age, sex FROM info IN %s,%s" 
32
+ SQL文は、 "SELECT name, age, sex FROM info IN (%s,%s)" 
33
33
  tuple(names) ===> ("太郎", "史郎")
34
34
  なので、1番目の %s に「太郎」2番目の %s に「史郎」が渡されます。
35
35
  仮に太郎、史郎がSQLインジェクションの意図を持つ文字列であったとしても、エスケープされるため安全です。

3

  

2022/09/25 12:24

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- リストの要素分のプレースホルダを用意し、安全に配列を渡します。
1
+ リストの要素分のプレースホルダを用意し、安全にを渡します。
2
2
  ```python
3
3
  stmt_formats = ','.join(['%s'] * len(names))
4
4
  db.execute("SELECT name, age, sex FROM info IN (%s)" % stmt_formats, tuple(names))

2

 

2022/09/25 12:23

投稿

退会済みユーザー
test CHANGED
@@ -32,7 +32,7 @@
32
32
  SQL文は、 "SELECT name, age, sex FROM info IN %s,%s" 
33
33
  tuple(names) ===> ("太郎", "史郎")
34
34
  なので、1番目の %s に「太郎」2番目の %s に「史郎」が渡されます。
35
- 仮に太郎、史郎がSQLインジェクションの意図を持つ文字列であっても、エスケープされるため安全。
35
+ 仮に太郎、史郎がSQLインジェクションの意図を持つ文字列であったとしても、エスケープされるため安全です
36
36
 
37
37
  ※ f ストリングによって SQL を直接組み立てる方法は、SQL インジェクションを起こす危険があるため、以下のような場合を除き、安易に使用すべきではありません。
38
38
  <f ストリング等での組み立てでもよい場合>

1

 

2022/09/25 12:22

投稿

退会済みユーザー
test CHANGED
@@ -18,7 +18,7 @@
18
18
  ```
19
19
  "SELECT name, age, sex FROM info IN (%s)" % stmt_formats
20
20
  ```
21
- この部分で、IN のにある %s が、さきほど作成した stmt_formats (「%s,%s」)に置換されます。
21
+ この部分で、IN のにある %s が、さきほど作成した stmt_formats (「%s,%s」)に置換されます。
22
22
  ```
23
23
  ・作成されるSQL文
24
24
  "SELECT name, age, sex FROM info IN %s,%s"