質問するログイン新規登録

質問編集履歴

14

コード修正

2019/09/10 09:04

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -31,52 +31,32 @@
31
31
 
32
32
  作成中のコード
33
33
  --
34
- a.py(例外処理,sqlの条件等は長くて見ずらくなるので出来るだけ除外しました)
35
- ```python
36
- con = Con()
37
-
38
- def put(self, id):
39
- m = con.put_m(id)
40
-     # 更新有無の確認
41
- if m is None:
42
- print('更新対象なし')
43
- else:
44
- # 更新処理とインサート処理呼ぶ?
45
- # 以下のままだと、Noneでエラーなのは認識しています。
46
- return {'id': request.json['id']}
47
- ```
48
34
  b.py
49
35
  ```python
50
36
  class Con:
51
-   def put_m(self, id):
37
+   def put_main(self, id):
52
38
  # Update
53
- update = Con.query.filter(Con.id == id).first()
39
+ update = Con.query.filter(id == id).first()
54
40
  update.end = datetime.datetime.now()
55
41
  if update is None:
56
42
  print('NotUpdate')
57
43
  else:
58
-       # updateあったらinsert
44
+       # updateaあったらinsert
59
- m_data = []
45
+ data = []
60
46
  # insert
61
47
  insert = Con(
62
- id = m_data['id'],
48
+ id = data['id'],
63
- str = m_data['str'],
49
+ str = data['str'],
64
50
  start= created_time,
65
51
  end = datetime.date.max,
66
- )
52
+ )
67
53
  m_set.append(insert)
68
- contact = Contact(**m_data)
54
+ contact = Contact(**data)
69
55
  m_set.append(contact)
70
- self.__commit_all(update, insert)
56
+ self.__commit(update, insert)
71
57
  return m_set
72
58
 
73
59
  ```
74
- せめて、セレクトだけでもと思い、下記を作成して実行したらセレクトは出来るのは確認しました。
75
- ```python
76
- def put_m(self, id):
77
- update = Con.query.filter(Con.id == id).first()
78
- return update
79
- ```
80
60
 
81
61
  現在以下のURL参考に進めています。
82
62
  --

13

文言変更

2019/09/10 09:04

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
  |1|aaa|2019-08-26 23:27:13|2019-08-28 23:27:13(現在日時に更新(now()))
22
22
  |1|bbb|2019-08-26 23:27:13|9999-12-31 09:00:00(☆ここが追加(insert))
23
23
 
24
- id箇所は、実際はuuidを使用。プライマリーキーのことは、忘れてください。
24
+ ※プライマリーキーのことは、忘れてください。
25
25
 
26
26
  現状
27
27
  --
@@ -36,7 +36,7 @@
36
36
  con = Con()
37
37
 
38
38
  def put(self, id):
39
- m = con.put_m(uuid.UUID(id))
39
+ m = con.put_m(id)
40
40
      # 更新有無の確認
41
41
  if m is None:
42
42
  print('更新対象なし')

12

コード削除

2019/08/29 04:02

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -85,44 +85,6 @@
85
85
  [SQLAlchemyで基本的なSQLクエリまとめ](https://qiita.com/ckern/items/a762b1bc0f192a55eae8)
86
86
  など...
87
87
 
88
- 前のコード
89
- --
90
- b.py
91
- ```python
92
- class Con:
93
-   def put_m(self, m_data):
94
- m_data = Con.query.filter(Con.id == id).first()
95
- # ここでinsertとupdateの内容を読ぶとかすればいい?
96
-      update = set(updata, insert, datetime.datetime.now())
97
- # コミット処理
98
- self.__commit_all(update, insert)
99
88
 
100
- # insertとupdate文用に書いたがどう使えばいいのかわからない。
101
- def set(self, m_data, created_time):
102
- # update文はこれのはず
103
- update = Con.query.filter(Con.id == id).first()
104
- update.end = datetime.datetime.now()
105
-
106
- # insert文はこんな感じなはず
107
- insert = Con(
108
- id = m_data['id'],
109
- str = m_data['str'],
110
- start= created_time,
111
- end = datetime.date.max,
112
- ) m_set.append(insert)
113
- contact = Contact(**m_data)
114
- m_set.append(contact)
115
- return m_set
116
-
117
- def __commit_all(self, commit_data):
118
- try:
119
- db.session.add_all(commit_data)
120
- db.session.commit()
121
- except Exception as e:
122
- db.session.rollback()
123
- raise e
124
- ```
125
-
126
-
127
89
  こんな感じでやれば出来るのではないかなどのアドバイスだけでも頂ければ幸いです。
128
90
  updateとinsertしたいです・・・よろしくお願い致します。

11

コード追加

2019/08/29 03:48

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -69,6 +69,7 @@
69
69
  m_set.append(contact)
70
70
  self.__commit_all(update, insert)
71
71
  return m_set
72
+
72
73
  ```
73
74
  せめて、セレクトだけでもと思い、下記を作成して実行したらセレクトは出来るのは確認しました。
74
75
  ```python
@@ -112,6 +113,14 @@
112
113
  contact = Contact(**m_data)
113
114
  m_set.append(contact)
114
115
  return m_set
116
+
117
+ def __commit_all(self, commit_data):
118
+ try:
119
+ db.session.add_all(commit_data)
120
+ db.session.commit()
121
+ except Exception as e:
122
+ db.session.rollback()
123
+ raise e
115
124
  ```
116
125
 
117
126
 

10

不要文言削除

2019/08/28 09:08

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,7 @@
18
18
  teime_endを現在日時に更新して、同じidで登録する。(strが入力画面から受け取った内容)
19
19
  |id|str|start | end        
20
20
  |:--|:--:|--:|
21
- |1|aaa|2019-08-26 23:27:13|2019-08-28 23:27:13(現在日時に更新したい(now()))
21
+ |1|aaa|2019-08-26 23:27:13|2019-08-28 23:27:13(現在日時に更新(now()))
22
22
  |1|bbb|2019-08-26 23:27:13|9999-12-31 09:00:00(☆ここが追加(insert))
23
23
 
24
24
  ※id箇所は、実際はuuidを使用。プライマリーキーのことは、忘れてください。

9

DBイメージ変更

2019/08/28 08:54

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -9,13 +9,13 @@
9
9
 
10
10
  実現したいDB
11
11
  --
12
- (もともと入っている想定のDB(con)状態)
12
+ (もともとのDB(con)状態)
13
13
  |id|str|start      |   end
14
14
  |:--|:--:|--:|
15
15
  |1|aaa|2019-08-22 23:27:13|9999-12-31 09:00:00
16
16
 
17
- 下のように更新ンサトしたいです。(↓)
17
+ 上記DBが、のように更新される。(↓)
18
- teime_endを現在日時に更新して、同じidで登録(strが変るする。
18
+ teime_endを現在日時に更新して、同じidで登録する。(strが入力画面から受け取った内容
19
19
  |id|str|start | end        
20
20
  |:--|:--:|--:|
21
21
  |1|aaa|2019-08-26 23:27:13|2019-08-28 23:27:13(現在日時に更新したい(now()))

8

文言追加

2019/08/28 08:54

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  詳細:
6
6
  入力画面上で、"ID"と"str"が入力出来る画面があります。
7
7
  "ID"が登録あった場合、入力[ID]の"end"を現在時刻に更新、更新した"ID"と入力された"str"を登録(insert)したいです。
8
- ※もはや、何をどうしたらいいのかわからなくなりました。すみません。
8
+ ※もはや、何をどうしたらいいのかわからなくなりました。insertとupdateがよくわかっていないのかもしれません・・・すみません。
9
9
 
10
10
  実現したいDB
11
11
  --

7

コード変更

2019/08/28 08:50

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -53,7 +53,7 @@
53
53
  update = Con.query.filter(Con.id == id).first()
54
54
  update.end = datetime.datetime.now()
55
55
  if update is None:
56
- raise NotFound('NotUpdate')
56
+ print('NotUpdate')
57
57
  else:
58
58
        # updateあったならinsert
59
59
  m_data = []

6

タイトル変更

2019/08/28 08:47

投稿

s_akira
s_akira

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- 【Python3】SQLAlchemyを使用し、UpdateとInsertを1トランザクションで行いたい
1
+ 【Python3】SQLAlchemyを使用し、UpdateとInsertを1トランザクションで行いたい
body CHANGED
File without changes

5

コメント変更

2019/08/28 08:46

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,10 @@
1
1
  実現したいこと
2
2
  --
3
3
  SQLAlchemyを使用して、UpdateとInsertを1トランザクションで行いたいです。
4
+
5
+ 詳細:
4
- 詳細:既存登録されているend_timeを現在時刻に更新してinsertしたいです。
6
+ 入力画面上で、"ID"と"str"が入力出来る画面があります。
7
+ "ID"が登録あった場合、入力[ID]の"end"を現在時刻に更新、更新した"ID"と入力された"str"を登録(insert)したいです。
5
8
  ※もはや、何をどうしたらいいのかわからなくなりました。すみません。
6
9
 
7
10
  実現したいDB

4

エラー内容修正

2019/08/28 08:37

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
  現状
24
24
  --
25
25
  下に、途中コードを載せますがここから先どうしたらいいのかで止まっています。
26
- 現在"TypeError: 'NoneType' object is not subscriptable"エラーで止まっている状態です。
26
+ 現在"name 'm_data' is not defined"エラーで止まっている状態です。
27
27
  (自身で解決できれば、すぐにコードを更新致します。申し訳ありません。)
28
28
 
29
29
  作成中のコード

3

リンク・タグ追加

2019/08/28 08:17

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -78,6 +78,7 @@
78
78
  --
79
79
  [SQLAlchemyでUpdateするには](https://qiita.com/nskydiving/items/745f985a42da89a16934)
80
80
  [SQLAlchemyの基本的な使い方](https://takuya-1st.hatenablog.jp/entry/2017/03/29/002701)
81
+ [SQLAlchemyで基本的なSQLクエリまとめ](https://qiita.com/ckern/items/a762b1bc0f192a55eae8)
81
82
  など...
82
83
 
83
84
  前のコード

2

ソースコードの変更

2019/08/28 08:15

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
@@ -45,6 +45,46 @@
45
45
  b.py
46
46
  ```python
47
47
  class Con:
48
+   def put_m(self, id):
49
+ # Update
50
+ update = Con.query.filter(Con.id == id).first()
51
+ update.end = datetime.datetime.now()
52
+ if update is None:
53
+ raise NotFound('NotUpdate')
54
+ else:
55
+       # updateあったならinsert
56
+ m_data = []
57
+ # insert
58
+ insert = Con(
59
+ id = m_data['id'],
60
+ str = m_data['str'],
61
+ start= created_time,
62
+ end = datetime.date.max,
63
+ )
64
+ m_set.append(insert)
65
+ contact = Contact(**m_data)
66
+ m_set.append(contact)
67
+ self.__commit_all(update, insert)
68
+ return m_set
69
+ ```
70
+ せめて、セレクトだけでもと思い、下記を作成して実行したらセレクトは出来るのは確認しました。
71
+ ```python
72
+ def put_m(self, id):
73
+ update = Con.query.filter(Con.id == id).first()
74
+ return update
75
+ ```
76
+
77
+ 現在以下のURL参考に進めています。
78
+ --
79
+ [SQLAlchemyでUpdateするには](https://qiita.com/nskydiving/items/745f985a42da89a16934)
80
+ [SQLAlchemyの基本的な使い方](https://takuya-1st.hatenablog.jp/entry/2017/03/29/002701)
81
+ など...
82
+
83
+ 前のコード
84
+ --
85
+ b.py
86
+ ```python
87
+ class Con:
48
88
    def put_m(self, m_data):
49
89
  m_data = Con.query.filter(Con.id == id).first()
50
90
  # ここでinsertとupdateの内容を読ぶとかすればいい?
@@ -69,18 +109,7 @@
69
109
  m_set.append(contact)
70
110
  return m_set
71
111
  ```
72
- せめて、セレクトだけでもと思い、下記を作成して実行したらセレクトは出来るのは確認しました。
73
- ```python
74
- def put_m(self, id):
75
- update = Con.query.filter(Con.id == id).first()
76
- return update
77
- ```
78
112
 
79
- 現在以下のURL参考に進めています。
80
- --
81
- [SQLAlchemyでUpdateするには](https://qiita.com/nskydiving/items/745f985a42da89a16934)
82
- [SQLAlchemyの基本的な使い方](https://takuya-1st.hatenablog.jp/entry/2017/03/29/002701)
83
- など...
84
113
 
85
114
  こんな感じでやれば出来るのではないかなどのアドバイスだけでも頂ければ幸いです。
86
115
  updateとinsertしたいです・・・よろしくお願い致します。

1

タグの追加

2019/08/28 08:00

投稿

s_akira
s_akira

スコア15

title CHANGED
File without changes
body CHANGED
File without changes