回答編集履歴
2
formMemberListのことを忘れていたのを修正
test
CHANGED
@@ -1,27 +1,81 @@
|
|
1
|
-
|
1
|
+
まずそうなところが2つあるようです。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
## 結合部のシングルクオート
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
|
9
|
+
`cur.execute("SELECT * FROM customer WHERE '%s'" %wheres)`
|
10
10
|
|
11
|
-
|
11
|
+
この行で、 %s をシングルクオートで囲んでいるので、WHERE の後が `'` で囲まれてしまいます。
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
|
15
|
+
## formMemberListの中身
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
|
19
|
+
`"name:'takumi'"` という内容なので SQLにそのまま埋め込めません。
|
20
20
|
|
21
|
-
|
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
|
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な場合の例を追加
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なはず
|