创建了一个table,用faker做虚拟数据的时候,总是提示我错误,print了sql语句:INSERT INTO CONTACTS(ID,CreatedAt,UpdatedAt,AccountId,FirstName,LastName) VALUES (93d0145a-da99-45dd-98eb-96ed4407a605,1994-03-17 21:27:54,1994-08-08 14:43:56,10,Robin,Dietrich)
放到库里发现是value里没有引号,我声明的是string的变量,为什么在代码里运行就不行呢?
func fakerContact(db *sql.DB){
fmt.Println("Create Faker Contact...")
ID := fmt.Sprintf(faker.UUIDHyphenated())
CreatedAt := fmt.Sprintf(faker.Timestamp())
UpdatedAt := fmt.Sprintf(faker.Timestamp())
AccountId := fmt.Sprintf(faker.DayOfMonth())
FirstName := fmt.Sprintf(faker.FirstName())
LastName := fmt.Sprintf(faker.LastName())
test := "INSERT INTO CONTACTS(ID,CreatedAt,UpdatedAt,AccountId,FirstName,LastName) VALUES ("+ID+","+CreatedAt+","+UpdatedAt+","+AccountId+","+FirstName+","+LastName+")"
fmt.Println("test:"+test)
_, err := db.Exec("INSERT INTO CONTACTS(ID,CreatedAt,UpdatedAt,AccountId,FirstName,LastName) VALUES (?,?,?,?,?,?)",ID,CreatedAt,UpdatedAt,AccountId,FirstName,LastName)
if err != nil {
log.Fatal(err)
} else {
fmt.Println("Create Faker Contact Done!")
}
}
更多评论
几个常用的sql驱动里面
mysql,postgre,mssql,sqlite都有语法不一致的地方。
sql库只是做调用的接口
具体的是需要rom/query buiilder去实现的。
#2
1.go的普通驱动是无法自动识别你的参数类型的, 它只能用printf替换你的?参数而不能自动帮你加上引号, 因为对它来说所有的? 都是一样的可以fmt的变量
2.你需要找更好的ORM驱动
#3