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

質問編集履歴

3

追記で質問をさせていただきました。

2017/09/13 12:06

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -109,4 +109,80 @@
109
109
  ```
110
110
  go-sqlite3はドライバという役割であって、GORMと併用する場合は直接使わないものなんですかね?
111
111
 
112
- 質問攻めすみません。
112
+ 質問攻めすみません。
113
+
114
+ #追記2
115
+ とりあえず、gormを使ってDBにレコードを作ることはできるようになりました。
116
+ あとややこしく考えていましたが、GORMは、単純にGo言語でsqlを楽に扱うためのライブラリってことに気がついて気が楽になりました。
117
+
118
+ レコード作成はこうですね!↓(質問ではないので軽く見流していただければ結構です 汗)
119
+ ```go
120
+ type UserData struct {
121
+ gorm.Model //ここにCreatedAtがあるのでタイムスタンプは任せればいいですね。
122
+ Userid string
123
+ Password string
124
+ }
125
+
126
+ func main() {
127
+ saveUserData("DDxlk", "DDxlkDayo")
128
+ }
129
+
130
+ func SaveUserData(userid, password string) {
131
+ db, err := gorm.Open("sqlite3", "test.sqlite3")
132
+ if err != nil {
133
+ panic("failed to connect database")
134
+ }
135
+ defer db.Close()
136
+ // Migrate the schema
137
+ db.AutoMigrate(&UserData{})
138
+ // Create
139
+ user := &UserData{Userid: userid, Password: password}
140
+ db.Create(&user)
141
+ }
142
+ ```
143
+
144
+ ###質問1
145
+ useridとpasswordをhtmlのフォームからechoに送ってdbに登録するわけですが、dbに何も書き込まれません(レコードのuseridとpasswordの部分が空白になってしまいます)
146
+ registration.html(登録)のフォームの部分が以下です
147
+ ```html
148
+ <form action="/api/register" method="post" name="registration_form">
149
+ <input type="text" name="userid" id="userid_form"/>
150
+ <input type="password" name="password" id="password_form"/>
151
+ <input type="hidden" name="register" value="register">
152
+ <a id="login_button" onclick="document.registration_form.submit();return false;">Register</a>
153
+ </form>
154
+ ```
155
+ そして、打ち込まれたuseridとpasswordをdbに登録する処理が以下です
156
+ ```go
157
+ //echo
158
+ e.POST("/api/register", func(c echo.Context) error {
159
+ id := c.Param("userid") //フォームからidを取得しているつもり
160
+ password := c.Param("password") //フォームからpasswordを取得しているつもり
161
+ SaveIdOnDB(id, password)
162
+ return c.Render(http.StatusOK, "index", nil)
163
+ )}
164
+
165
+ type UserData struct {
166
+ gorm.Model
167
+ Userid string
168
+ Password string
169
+ }
170
+
171
+ func SaveUserData(userid, password string) {
172
+ db, err := gorm.Open("sqlite3", "test.sqlite3")
173
+ if err != nil {
174
+ panic("failed to connect database")
175
+ }
176
+ defer db.Close()
177
+ // Migrate the schema
178
+ db.AutoMigrate(&UserData{})
179
+ // Create
180
+ user := &UserData{Userid: userid, Password: password}
181
+ db.Create(&user)
182
+ ```
183
+
184
+ ###質問2
185
+ 先ほどからtest.sqlite3の中にレコードを作成してるわけなんですが、レコードの値をコマンドラインに出力するにはどうすればいいのでしょうか。(先日コメントでも申し上げた通り、fmt.Printlnするとポインタの値が出力されます)
186
+
187
+ 今はそれがわからないため、DB Browser for SQLiteというGUIソフトで中身を閲覧しています。
188
+ ![DB Browser for SQLite](4c603adfebdf08a6fb7fc3f8958c6bd2.png)

2

さらに追記しました

2017/09/13 12:06

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -79,7 +79,7 @@
79
79
  ```
80
80
  このコードはどういう場合(タイミング)に書くものなんでしょうか?
81
81
 
82
- ・Readについて
82
+ **・Readについて**
83
83
  ```go
84
84
  var products []Product
85
85
  // Get all records
@@ -100,4 +100,13 @@
100
100
 
101
101
  これは、SELECTによって取得したものは、DBの操作でしか扱えない(型の問題上)ということなんでしょうか。
102
102
 
103
+ **・go-sqlite3パッケージについて**
104
+ mattnさんは回答において、go-sqlite3パッケージの関数等を直接使ってらっしゃらないと思うのですが、go-sqlite3はどこで使うのですか?
105
+ それとも、
106
+ ```go
107
+ //db, err := gorm.Open("ドライバ名称", "接続文字列")
108
+ db, err := gorm.Open("sqlite3", "foo.sqlite")
109
+ ```
110
+ go-sqlite3はドライバという役割であって、GORMと併用する場合は直接使わないものなんですかね?
111
+
103
112
  質問攻めすみません。

1

質問を追記しました

2017/09/11 10:27

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,61 @@
43
43
  が知りたいです。
44
44
  #ログインのサブミットに関して
45
45
  サブミットの処理はhtmlで"/api/login"にpostするようにして、go側のe.POST()の中にDB関係の処理を書けばいいのかなと思っています。
46
- なのでDBに関してを勉強しているというわけです。
46
+ なのでDBに関してを勉強しているというわけです。
47
+
48
+ #追記
49
+ **・GORMのCreateについて**
50
+ そもそも、GORMのCreateというのは、データベースのテーブルを作るという意味でしょうか?
51
+ つまり、
52
+ ```go
53
+ db.Create(&Product{Code: "L1212", Price: 2000})
54
+ db.Create(&Product{Code: "L1213", Price: 3000})
55
+ db.Create(&Product{Code: "L1214", Price: 4000})
56
+ db.Create(&Product{Code: "L1215", Price: 5000})
57
+ db.Create(&Product{Code: "L1216", Price: 6000})
58
+ db.Create(&Product{Code: "L1217", Price: 7000})
59
+ ```
60
+
61
+ このようなコードを実行すると、
62
+
63
+ | Code | Price |
64
+ |------------:|:------------:|
65
+ | L1212 | 2000 |
66
+ | L1213 | 3000 |
67
+ | L1214 | 4000 |
68
+ | L1215 | 5000 |
69
+ | L1216 | 6000 |
70
+ | L1217 | 7000 |
71
+
72
+ こういったテーブルを作成するということでしょうか。
73
+
74
+ **・マッピングとは**
75
+ マッピングとは噛み砕くとどういう処理でしょうか?
76
+ ORM(オブジェクト関係マッピング)特有の用語なのかなというのはわかるのですが。。
77
+ ```go
78
+ db.AutoMigrate(&Product{})
79
+ ```
80
+ このコードはどういう場合(タイミング)に書くものなんでしょうか?
81
+
82
+ ・Readについて
83
+ ```go
84
+ var products []Product
85
+ // Get all records
86
+ db.Find(&products)
87
+ //// SELECT * FROM products;
88
+ ```
89
+ これはProductテーブル内の全てのレコードを取得するという意味かと思うのですが
90
+ セレクトしたものをプリントしようとして
91
+ ```go
92
+ aa := db.Find(&products)
93
+ fmt.Println(aa)
94
+ ```
95
+ こう書いたのですが、
96
+ ```
97
+ &{0xc420179280 <nil> 6 0xc420174dc0 false 0 {0xc4200fbf40} 0xc420418420 map[] 0xc42016f710 <nil> <nil> false}
98
+ ```
99
+ このように出力されました。
100
+
101
+ これは、SELECTによって取得したものは、DBの操作でしか扱えない(型の問題上)ということなんでしょうか。
102
+
103
+ 質問攻めすみません。