回答編集履歴

7

追記

2018/08/13 19:54

投稿

umyu
umyu

スコア5846

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

追記

2018/08/13 19:54

投稿

umyu
umyu

スコア5846

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

サーバー多重化の説明を追加

2018/08/13 19:38

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  << 結果 >>
12
12
 
13
- リクエスト処理がサーバーで多重化された時に、DBコネクションが多重化さた時とそうではない時で実行結果が変化するのではないかと。(※3)
13
+ リクエスト処理がサーバーで多重化(apache prefork)時に、DBコネクションがもう1個生まてトランザクション分離レベルの影響を受けるのではないかと。
14
14
 
15
15
 
16
16
 

4

追記

2018/08/13 19:32

投稿

umyu
umyu

スコア5846

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()`後にカーソル(トランザクション)を作り直していないからでは。(※3個人的には必要な都度DBにconnnectしてDBとの接続はコネクションプールを使用する事をお勧めします。)
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
- ※3 「connector connection pool python 2017」でググると。
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

追記

2018/08/13 19:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -4,25 +4,25 @@
4
4
 
5
5
  トランザクション分離レベル(`isolation level`※1)として、`READ COMMITTED`を指定していなく、
6
6
 
7
- なおかつカーソルをモジュール変数にって(※2)、`db.commit()`後にカーソル(トランザクション)を作り直していないからでは。
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

追記

2018/08/13 17:23

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,24 +1,22 @@
1
- mysql.connector.connectはあまり使ったことがないので、憶測回答になりますが。
1
+ `mysql.connector.connect`はあまり使ったことがないので、憶測回答になりますが。
2
2
 
3
3
 
4
4
 
5
- トランザクション分離レベル(isolation levelでググるといいかもです)として、READ COMMITTEDを指定していなく、
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
- 前質問あってteratail回答た記憶(汗)
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

追記

2018/08/13 17:03

投稿

umyu
umyu

スコア5846

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