回答編集履歴

2

formMemberListのことを忘れていたのを修正

2020/06/29 16:15

投稿

YakumoSaki
YakumoSaki

スコア2027

test CHANGED
@@ -1,27 +1,81 @@
1
- `cur.execute("SELECT * FROM customer WHERE '%s'" %wheres)`
1
+ まずそうなところが2つあるようです。
2
2
 
3
3
 
4
4
 
5
- 行で、 %s をシングルクオートで囲んでいるのが原因ではないでしょうか?
5
+ ## 結合部のシングルクオート
6
6
 
7
7
 
8
8
 
9
- 蛇足ですが、 wheres "1 = 1" を入れておくと、 `AND` を入れる入れないの判定が不要になって便利です。
9
+ `cur.execute("SELECT * FROM customer WHERE '%s'" %wheres)`
10
10
 
11
- (1 = 1入れるのであれば必ず AND を先頭に付ける。に固定ます
11
+ この行で、 %sシングルクオートで囲んでいるので、WHERE の後が `'` れてしまいま
12
12
 
13
13
 
14
14
 
15
- $ python
15
+ ## formMemberListの中身
16
16
 
17
17
 
18
18
 
19
- >>> wheres = "1=1 and 2=2"
19
+ `"name:'takumi'"` という内容なので SQLにそのまま埋め込めません。
20
20
 
21
- >>> print("SELECT * FROM customer WHERE '%s'" %wheres)
21
+ 今回は、とりあえず `:` -> `=` に置換して形を合わせてみました。
22
22
 
23
- SELECT * FROM customer WHERE '1=1 and 2=2' <=== ここのシングルクオートいらないですよね
24
23
 
25
- >>> print("SELECT * FROM customer WHERE %s" %wheres) <== %s のクオートを削除
26
24
 
25
+ ## 蛇足
26
+
27
+ where のあとに "1 = 1" をとりあえず入れておくと、 `AND` を入れる入れないの判定が不要になって便利です。
28
+
29
+ サンプルコードではこれを使って楽をしています。
30
+
31
+
32
+
33
+ ## 蛇足2
34
+
35
+
36
+
37
+ member が menber になっていますが、そのままにしてあります。
38
+
39
+
40
+
41
+ ## 結論
42
+
43
+
44
+
45
+ 必要な部分を切り出して最小限のコードを書きました。 下記ご参照下さい。
46
+
47
+ yymmtさん、ご指摘ありがとうございました。
48
+
49
+
50
+
51
+ ```
52
+
53
+ def reference(formMemberList):
54
+
55
+
56
+
57
+ wheres = "1 = 1"
58
+
59
+ for menber in formMemberList:
60
+
61
+ wheres += " AND "
62
+
63
+ wheres += menber.replace(":", "=")
64
+
65
+
66
+
27
- SELECT * FROM customer WHERE 1=1 and 2=2 <=== これならOKなはず
67
+ print("SELECT * FROM customer WHERE %s" %wheres)
68
+
69
+
70
+
71
+ return None
72
+
73
+
74
+
75
+
76
+
77
+ formMemberList = ["name:'takumi'", "birth:'1995-02-17'"]
78
+
79
+ rows = reference(formMemberList)
80
+
81
+ ```

1

OKな場合の例を追加

2020/06/29 16:15

投稿

YakumoSaki
YakumoSaki

スコア2027

test CHANGED
@@ -21,3 +21,7 @@
21
21
  >>> print("SELECT * FROM customer WHERE '%s'" %wheres)
22
22
 
23
23
  SELECT * FROM customer WHERE '1=1 and 2=2' <=== ここのシングルクオートいらないですよね
24
+
25
+ >>> print("SELECT * FROM customer WHERE %s" %wheres) <== %s のクオートを削除
26
+
27
+ SELECT * FROM customer WHERE 1=1 and 2=2 <=== これならOKなはず