- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 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)
任何关于将用户的 key 合并和添加到用户信息中适当条目的建议都将不胜感激……我意识到这些可能是非常愚蠢的问题,但请原谅我的天真。
最佳答案
我通过从第一个查询返回插入的用户 ID 并在第二个查询中使用它来做到这一点,但我没有使用 upsert。
所以你可以尝试使用RETURNING返回新添加用户的 ID 或通过电子邮件单独查询(因为在这种情况下,每个用户的电子邮件看起来都是唯一的)。
然后将其用于第二个查询:
_, err = db.Query(`INSERT INTO userinfo (usr, dob, phonenum, bio, mates, bought, sold)
VALUES ($1, $2, $3, $4, $5, $6, $7)`,
id, // there
r.FormValue("dob"),
r.FormValue("phonenum"),
...
我假设 usr
是用户 ID(users.id
的外键)
示例源代码:
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
"log"
)
func main() {
db, err := sql.Open("postgres", "user=alex dbname=tmp sslmode=disable")
if err != nil {
log.Fatal(err)
}
rows, 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)
RETURNING id`,
"first", "last", "email", "password", 0, 0)
defer rows.Close()
if err != nil {
log.Fatal(err)
}
if rows.Next() {
id := 0
rows.Scan(&id)
_, err = db.Exec(`INSERT INTO userinfo (user_id, info) VALUES ($1, $2)`, id, "info")
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted:", id)
}
}
我个人更喜欢 QueryRow 而不是 query,因为它返回一行更明显,但它也适用于 Query。
我还建议对电子邮件使用唯一索引,而不是子查询。
关于Postgresql Golang Martini 插入键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751111/
我正在尝试从我的测试文件中拆分我的应用程序文件。它看起来像这样: main.go views/ layouts/ layout.html spec/ main_test.go main
我尝试用马提尼渲染我的页面布局.html ... ... {{ yield }} ... index.html Hello 渲染选项: m.Use(r
我正在使用 martini、golang 和 postgresql 构建一个社交网络类型的服务器作为练习,以帮助培养我在这三方面的技能。我想不明白的几个关键问题是如何将用户表中的主键插入到用户信息表的
我正在尝试定义代码块,如果它们被定义,这些代码块将被注入(inject)到基本模板中。我不想将一个页面上需要的所有脚本都包含到不需要它的另一个页面上。 我正在使用: "github.com/go-ma
我需要设置位于“公共(public)”文件夹中的默认页面“index.html”。我如何在 Martini 框架中做到这一点? 我试过了,但是没用: func main() { m := ma
如何将 martini 日志路径设置为某个随机文件。它现在显示在控制台中。 m := martini.Classic() 感谢帮助 最佳答案 将新记录器附加到 Martini: f, err := o
我正在尝试学习来自 Rails 的马提尼酒。马提尼世界中的数据库迁移使用什么? 最佳答案 马提尼中没有这样的东西。它只是编写 Web 服务的 helper 。如果您想要数据库迁移或根本不需要数据库,请
我用 Martini 编写了我的第一个 Go 应用程序。我有带命名参数的路由: m := martini.Classic() staticOptions := martini.StaticOption
我目前正在使用 golang 和 Martini 等,并希望动态地提供一些操作/生成的图像。这是一个最小的例子: package main import ( "github.com/codeg
我构建了一个网络爬虫,提供一些有关其发现的 http 信息。爬虫作为 go routine 运行,martini 运行 web 服务器。过了一会儿,我开始得到 2014/08/01 10:23:51
我正在尝试在 Go 中将 Auth0 与 Martini 一起使用。我正在使用他们的 examples但无论我尝试什么,我似乎都无法让它工作。 这是我的代码: package main import
我正在玩 Martini,出于某种原因我无法让 contrib 绑定(bind)包工作。 我的结构没有绑定(bind)值。我已将代码缩减为最简单的形式,但它仍然无法正常工作。 谁能看出我做错了什么
当我试图从我的数据库中获取 JSON 数据时,我得到了这个: {“时间”:“14 年 12 月 11 日 13:42:21”,“:”:“Привет” {"time":"13:42:25 11.12.
我是 Go 的新手,想知道是否有关于如何测试 Go Martini 的处理程序代码的示例的约定/标准? 提前致谢! 最佳答案 martini-contrib 库有很多值得一看的现有代码:https:/
我正在尝试使用 vk auth与 martini .但是编译时出错: /goPath/vkAuthTry2.go:38: undefined: YourRedirectFunc 问题是如何定义Your
下面的代码在本地服务器上完美运行,但是当适应谷歌应用引擎时(func main 更改为 init 并且包名称从 main 设置为测试应用程序)oauth2callback 请求不再工作,下面的请求被重
我是 GO 和马提尼套餐的新手。我现在想做的是使用 AJAX 提交表单。问题是 go 返回整个 html 文件。我不知道是否有错误,因为没有错误返回。我需要测试我的表单是否成功提交数据,因为我将使用它
我在使用这个语句时遇到问题 m.Post(Model, binding.Form(Wish), func(wish Wish, r render.Render, db *mgo.Database)
我想给自己发送电子邮件,但页面 http://localhost:3000/panic 出现错误包含错误 url - /panic 在我们的例子中。但是我不知道如何从 RecoverWrap 方法中的
这没有太多背景,因为它确实是一种应该起作用的情况,但它却不起作用。 我正在使用马提尼框架。在一个处理程序中,我正在使用这个: session.Set("deployed", "true") r.Red
我是一名优秀的程序员,十分优秀!