【发布时间】:2015-10-23 10:11:14
【问题描述】:
我正在构建一个社交网络类型的服务器作为练习,使用 martini、golang 和 postgresql 来帮助培养我在这三个方面的技能。几个关键的事情是如何将用户表中的主键插入用户信息表的正确行(以将用户信息与特定用户联系起来)。我相信还有一种方法可以将这两个查询合并到一个更简洁的 postgres 脚本中......
func CreateUser(ren render.Render, r *http.Request, db *sql.DB) {
_, err := db.Query("INSERT INTO users (first, last, email, password, karma, value) SELECT CAST ($3 AS VARCHAR), $1, $2, $4, $5, $6 WHERE NOT EXISTS (SELECT * FROM users WHERE email = $3)",
r.FormValue("first"),
r.FormValue("last"),
r.FormValue("email"),
r.FormValue("password"),
0,
0)
PanicIf(err)
_, err = db.Query("INSERT INTO userinfo (usr, dob, phonenum, bio, mates, bought, sold) VALUES ($1, $2, $3, $4, $5, $6, $7)",
0,
r.FormValue("dob"),
r.FormValue("phonenum"),
r.FormValue("bio"),
0,
0,
0)
PanicIf(err)
ren.Redirect("/")
}
这里是创建用户表的脚本:
DROP TABLE IF EXISTS "public"."users";
CREATE TABLE "public"."users" (
"id" serial NOT NULL,
"first" varchar(40) NOT NULL COLLATE "default",
"last" varchar(40) NOT NULL COLLATE "default",
"email" varchar(40) NOT NULL COLLATE "default",
"password" varchar(40) NOT NULL COLLATE "default",
"karma" int NOT NULL,
"value" int NOT NULL
)
WITH (OIDS=FALSE);
我意识到在生产级代码中我不想像这样存储密码。我也对如何将非全局参数拉入数据库感到困惑,因为它是由 m.get 和 m.post 命令创建的。
m.Post("/newuser", CreateUser)
m.Get("/user", NewUser)
任何关于整合用户密钥并将其添加到 userinfo 中的相应条目的任何建议将不胜感激......我意识到这些可能是非常愚蠢的问题,但请原谅我的天真。
【问题讨论】:
-
感谢 AlexAtNet,我能够解决最初的问题... 有没有人对合并报表有任何建议?还是去掉多余的代码?
标签: postgresql go parameters martini