回答編集履歴

3

分割について追記

2018/03/20 05:44

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- 実行するSQLを調べたい時は、以下の三行展開できます。
57
+ 実行するSQLを調べたい時は、print文を追加して以下のよう分割できます。
58
58
 
59
59
  ```Python
60
60
 

2

追記

2018/03/20 05:44

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  質問文からは列:idの型が分かりませんが、エラーメッセージを見る限りでは
6
+
7
+
6
8
 
7
9
  ```sql
8
10
 
@@ -20,11 +22,13 @@
20
22
 
21
23
 
22
24
 
25
+
26
+
23
27
  ■補足解説
24
28
 
25
- Pythonプログラム上のSQL文字列と実際に実行されるSQLをごちゃに認識している気がします。
29
+ Pythonプログラム上のSQL文字列と実際に実行されるSQLをごちゃ混ぜに認識している気がします。
26
30
 
27
- 質問文のSQLで+=を使っている箇所は以下の部分です。
31
+ 質問文のSQL文字列で+=を使っている箇所は以下の部分です。
28
32
 
29
33
 
30
34
 
@@ -33,6 +37,20 @@
33
37
  self.cursor.execute('update virustotal_api_keys set use_time = now(),use_numbers += 1 where id = %d' % (m+1))
34
38
 
35
39
  ```
40
+
41
+
42
+
43
+ エラーメッセージが以下のメッセージなので、SQL中の%dは変数展開されています。
44
+
45
+
46
+
47
+ ```SQL
48
+
49
+ '+= 1 where id = 1'
50
+
51
+ ```
52
+
53
+
36
54
 
37
55
 
38
56
 

1

補足解説

2018/03/20 05:43

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- エラーメッセージを見る限りでは
5
+ 質問文からは列:idの型が分かりませんが、エラーメッセージを見る限りでは
6
6
 
7
7
  ```sql
8
8
 
@@ -20,8 +20,42 @@
20
20
 
21
21
 
22
22
 
23
+ ■補足解説
24
+
25
+ Pythonプログラム上のSQL文字列と実際に実行されるSQLをごっちゃに認識している気がします。
26
+
27
+ 質問文のSQLで+=を使っている箇所は以下の部分です。
28
+
29
+
30
+
31
+ ```Python
32
+
33
+ self.cursor.execute('update virustotal_api_keys set use_time = now(),use_numbers += 1 where id = %d' % (m+1))
34
+
35
+ ```
36
+
37
+
38
+
39
+ 実行するSQLを調べたい時は、以下の三行に展開できます。
40
+
41
+ ```Python
42
+
43
+ sql = 'update virustotal_api_keys set use_time = now(),use_numbers += 1 where id = %d' % (m+1)
44
+
45
+ # print文で表示される内容が実際に実行されるSQLです。
46
+
47
+ print(sql)
48
+
49
+ self.cursor.execute(sql)
50
+
51
+ ```
52
+
53
+
54
+
23
55
  ■余談
24
56
 
25
57
  1,commit文が質問文にはないのですが、適切なタイミングでcommitを忘れずにしてくださいな。
26
58
 
27
59
  2,self.connectとself.cursorはAnalysisクラスにclose関数を追加して[contextlib.closing](https://docs.python.jp/3/library/contextlib.html#contextlib.closing)を使う形にするとclose忘れを防ぎやすくなります。
60
+
61
+ 3,SQLインジェクション防止のためにSQLプレースフォルダを使う事を検討してくださいな。