質問編集履歴
14
コード修正
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
|
37
|
+
def put_main(self, id):
|
52
38
|
# Update
|
53
|
-
update = Con.query.filter(
|
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
|
-
#
|
44
|
+
# updateaあったらinsert
|
59
|
-
|
45
|
+
data = []
|
60
46
|
# insert
|
61
47
|
insert = Con(
|
62
|
-
id =
|
48
|
+
id = data['id'],
|
63
|
-
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(**
|
54
|
+
contact = Contact(**data)
|
69
55
|
m_set.append(contact)
|
70
|
-
self.
|
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
文言変更
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
|
-
※
|
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(
|
39
|
+
m = con.put_m(id)
|
40
40
|
# 更新有無の確認
|
41
41
|
if m is None:
|
42
42
|
print('更新対象なし')
|
12
コード削除
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
コード追加
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
不要文言削除
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(現在日時に更新
|
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イメージ変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,13 +9,13 @@
|
|
9
9
|
|
10
10
|
実現したいDB
|
11
11
|
--
|
12
|
-
(もともと
|
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
文言追加
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
コード変更
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
|
-
|
56
|
+
print('NotUpdate')
|
57
57
|
else:
|
58
58
|
# updateあったならinsert
|
59
59
|
m_data = []
|
6
タイトル変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【Python3】SQLAlchemyを使用し
|
1
|
+
【Python3】SQLAlchemyを使用し、UpdateとInsertを(1トランザクションで)行いたい
|
body
CHANGED
File without changes
|
5
コメント変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
実現したいこと
|
2
2
|
--
|
3
3
|
SQLAlchemyを使用して、UpdateとInsertを1トランザクションで行いたいです。
|
4
|
+
|
5
|
+
詳細:
|
4
|
-
|
6
|
+
入力画面上で、"ID"と"str"が入力出来る画面があります。
|
7
|
+
"ID"が登録あった場合、入力[ID]の"end"を現在時刻に更新、更新した"ID"と入力された"str"を登録(insert)したいです。
|
5
8
|
※もはや、何をどうしたらいいのかわからなくなりました。すみません。
|
6
9
|
|
7
10
|
実現したいDB
|
4
エラー内容修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
現状
|
24
24
|
--
|
25
25
|
下に、途中コードを載せますがここから先どうしたらいいのかで止まっています。
|
26
|
-
現在"
|
26
|
+
現在"name 'm_data' is not defined"エラーで止まっている状態です。
|
27
27
|
(自身で解決できれば、すぐにコードを更新致します。申し訳ありません。)
|
28
28
|
|
29
29
|
作成中のコード
|
3
リンク・タグ追加
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
ソースコードの変更
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
タグの追加
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|