回答編集履歴
7
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
`mysql.connector.connect`はあまり使ったことがないので、憶測回答になりますが。
|
1
|
+
`mysql.connector.connect`はあまり使ったことがないので、**憶測回答**になりますが。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -10,7 +10,21 @@
|
|
10
10
|
|
11
11
|
<< 結果 >>
|
12
12
|
|
13
|
-
リクエスト処理がサーバーで多重化(apache prefork)時に、DBコネクションがもう1個生まれてトランザクション分離レベルの影響を受けるのではないかと。
|
13
|
+
リクエスト処理がサーバーで多重化(apache prefork)時に、DBコネクションがもう1個生まれてトランザクション分離レベル(REPEATABLE READ)の影響を受けるのではないかと。
|
14
|
+
|
15
|
+
長くなったので2行ぐらいにまとめ。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
```
|
20
|
+
|
21
|
+
ブラウザからのリクエストを受けたプロセスが、insertしたプロセスと同一プロセス/スレッドなら表示される。
|
22
|
+
|
23
|
+
そうでないならば、モジュール変数でcur = db.cursor(dictionary=True)を行っているため、
|
24
|
+
|
25
|
+
トランザクションの分離レベルが(REPEATABLE READ)なためCOMMIT後に新しく開始されたトランザクションという条件を満たさないので、チャットログが表示されない。
|
26
|
+
|
27
|
+
```
|
14
28
|
|
15
29
|
|
16
30
|
|
6
追記
test
CHANGED
@@ -54,6 +54,14 @@
|
|
54
54
|
|
55
55
|
|
56
56
|
|
57
|
+
あと考えられる点は`Ajax`の`cache`が残っているとかです。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
---
|
62
|
+
|
63
|
+
|
64
|
+
|
57
65
|
質問の件から外れますが、`ORDER BY`を指定しない`SELECT`は結果の順序性を保証しません。
|
58
66
|
|
59
67
|
質問文からはインデクスを貼っているのか読み取れませんでしたが、以下のような形に。
|
5
サーバー多重化の説明を追加
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
<< 結果 >>
|
12
12
|
|
13
|
-
リクエスト処理がサーバーで多重化
|
13
|
+
リクエスト処理がサーバーで多重化(apache prefork)時に、DBコネクションがもう1個生まれてトランザクション分離レベルの影響を受けるのではないかと。
|
14
14
|
|
15
15
|
|
16
16
|
|
4
追記
test
CHANGED
@@ -2,9 +2,35 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
<< 理由 >>
|
6
|
+
|
5
7
|
トランザクション分離レベル(`isolation level`※1)として、`READ COMMITTED`を指定していなく、
|
6
8
|
|
7
|
-
なおかつカーソルをモジュール変数に持って(※2)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
|
9
|
+
なおかつDBカーソルをモジュール変数に持って(※2)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
|
10
|
+
|
11
|
+
<< 結果 >>
|
12
|
+
|
13
|
+
リクエスト処理がサーバーで多重化された時に、DBコネクションが多重化された時とそうではない時で実行結果が変化するのではないかと。(※3)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
ログファイルにプロセスID/スレッドIDを書き出せば動作確認できるかもです。
|
18
|
+
|
19
|
+
※未コンパイルコードです。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
```Python
|
24
|
+
|
25
|
+
from threading import get_ident
|
26
|
+
|
27
|
+
from os import getpid
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
alertPrint(f'pid:{getpid()},tid:{get_ident()}')
|
32
|
+
|
33
|
+
```
|
8
34
|
|
9
35
|
|
10
36
|
|
@@ -16,11 +42,9 @@
|
|
16
42
|
|
17
43
|
※1 ググるキーワードは「mysql connector isolation level」です。
|
18
44
|
|
19
|
-
※2 モジュール変数
|
45
|
+
※2 個人的にはモジュール変数に持たず、DB接続はコネクションプールを使用し、クライアントコードはその都度DBにconnnectする形をお勧め致します。
|
20
46
|
|
21
|
-
[Deployment](https://bottlepy.org/docs/dev/deployment.html)
|
22
|
-
|
23
|
-
|
47
|
+
「connector connection pool python 2017」でググると。
|
24
48
|
|
25
49
|
[Python Database Connection Pooling with MySQL](https://pynative.com/python-database-connection-pooling-with-mysql/)
|
26
50
|
|
3
追記
test
CHANGED
@@ -4,25 +4,25 @@
|
|
4
4
|
|
5
5
|
トランザクション分離レベル(`isolation level`※1)として、`READ COMMITTED`を指定していなく、
|
6
6
|
|
7
|
-
なおかつカーソルをモジュール変数に
|
7
|
+
なおかつカーソルをモジュール変数に持って(※2)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。(※3個人的には必要な都度DBにconnnectしてDBとの接続はコネクションプールを使用する事をお勧めします。)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
※1 ググるキーワード
|
12
|
-
|
13
|
-
「mysql connector isolation level」です。
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
※2 モジュール変数として持つと並列化する時に弊害がでそうな気がしますが。
|
18
|
-
|
19
|
-
`bottle`は並列粒度は`Threading`でしたっけ? 前teratailで粒度の質問があって回答した記憶が(滝汗)
|
20
8
|
|
21
9
|
|
22
10
|
|
23
11
|
■参考情報
|
24
12
|
|
25
13
|
[mysql connector not showing inserted results](https://stackoverflow.com/questions/21974627/mysql-connector-not-showing-inserted-results)
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
※1 ググるキーワードは「mysql connector isolation level」です。
|
18
|
+
|
19
|
+
※2 モジュール変数として持つと並列化する時に弊害が出そうな気がしますが。
|
20
|
+
|
21
|
+
[Deployment](https://bottlepy.org/docs/dev/deployment.html)
|
22
|
+
|
23
|
+
※3 「connector connection pool python 2017」でググると。
|
24
|
+
|
25
|
+
[Python Database Connection Pooling with MySQL](https://pynative.com/python-database-connection-pooling-with-mysql/)
|
26
26
|
|
27
27
|
|
28
28
|
|
2
追記
test
CHANGED
@@ -1,24 +1,22 @@
|
|
1
|
-
mysql.connector.connectはあまり使ったことがないので、憶測回答になりますが。
|
1
|
+
`mysql.connector.connect`はあまり使ったことがないので、憶測回答になりますが。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
トランザクション分離レベル(isolation level
|
5
|
+
トランザクション分離レベル(`isolation level`※1)として、`READ COMMITTED`を指定していなく、
|
6
6
|
|
7
|
-
なおかつカーソルをモジュール変数にもって(※)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
|
7
|
+
なおかつカーソルをモジュール変数にもって(※2)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
|
11
|
+
※1 ググるキーワード
|
12
12
|
|
13
|
-
note
|
13
|
+
「mysql connector isolation level」です。
|
14
14
|
|
15
|
-
※モジュール変数として持つと並列化する時に弊害がでそうな気がしますが。
|
16
15
|
|
17
|
-
bottleは並列粒度はThreadingでしたっけ?
|
18
16
|
|
19
|
-
|
17
|
+
※2 モジュール変数として持つと並列化する時に弊害がでそうな気がしますが。
|
20
18
|
|
21
|
-
```
|
19
|
+
`bottle`は並列粒度は`Threading`でしたっけ? 前teratailで粒度の質問があって回答した記憶が(滝汗)
|
22
20
|
|
23
21
|
|
24
22
|
|
@@ -32,9 +30,9 @@
|
|
32
30
|
|
33
31
|
|
34
32
|
|
35
|
-
質問の件から外れますが、ORDER BYを指定しないSELECTは順序性を保証しません。
|
33
|
+
質問の件から外れますが、`ORDER BY`を指定しない`SELECT`は結果の順序性を保証しません。
|
36
34
|
|
37
|
-
インデクスを貼っているのか
|
35
|
+
質問文からはインデクスを貼っているのか読み取れませんでしたが、以下のような形に。
|
38
36
|
|
39
37
|
|
40
38
|
|
1
追記
test
CHANGED
@@ -6,11 +6,19 @@
|
|
6
6
|
|
7
7
|
なおかつカーソルをモジュール変数にもって(※)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
|
8
8
|
|
9
|
+
|
10
|
+
|
11
|
+
```
|
12
|
+
|
13
|
+
note:
|
14
|
+
|
9
15
|
※モジュール変数として持つと並列化する時に弊害がでそうな気がしますが。
|
10
16
|
|
11
17
|
bottleは並列粒度はThreadingでしたっけ?
|
12
18
|
|
13
19
|
前質問があってteratailで回答した記憶が(汗)
|
20
|
+
|
21
|
+
```
|
14
22
|
|
15
23
|
|
16
24
|
|