xorm插入数据实例
package main import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
) var engine *xorm.Engine type User2 struct {
Name string `xorm:"varchar(25) 'usr_name'"`
Id int `xorm:"pk 'id' autoincr"`
} type User3 struct {
Name string `xorm:"varchar(25) 'usr_name'"`
Id int `xorm:"pk 'id' autoincr"`
} func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
} err = engine.CreateTables(User2{})
if err!=nil {
log.Fatal(err)
return
} err = engine.CreateTables(User3{})
if err!=nil {
log.Fatal(err)
return
} //func (engine *Engine) Insert(beans ...interface{}) (int64, error)
//返回的第一个参数是受影响的行数
//插入一条数据,可以用Insert
stu:= new(User2)
stu.Name ="user"
affected ,err :=engine.Insert(stu)
if err!=nil {
log.Fatal(err)
return
}
fmt.Println("插入一条数据用Insert受影响的行数:",affected) //插入一条数据,也可以用InsertOne
stu1:= new(User2)
stu1.Name="user2222"
affected ,err =engine.InsertOne(stu1)
if err!=nil {
log.Fatal(err)
return
}
fmt.Println("InsertOne受影响的行数:",affected) /* 插入同一个表的多条数据,
此时如果数据库支持批量插入,那么会进行批量插入,
但是这样每条记录就无法被自动赋予id值。
如果数据库不支持批量插入,那么就会一条一条插入。*/
sts:=make([]User2,3)
sts[0].Name ="name"
sts[1].Name ="name"
sts[2].Name ="name" affected,err = engine.Insert(sts)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入同一个表的多条数据受影响的行数:",affected)
//使用指针Slice插入多条记录,同上
stus:=make([]*User2,3)
stus[0] =new(User2)
stus[0].Name="name"
stus[1] =new(User2)
stus[1].Name="name"
stus[2] =new(User2)
stus[2].Name="name" affected,err = engine.Insert(stus)
if err !=nil {
log.Fatal(err)
return
} fmt.Println("使用指针Slice插入多条记录受影响的行数:",affected) //插入不同表的一条记录
s := new(User2)
s.Name="s"
s1:= new(User3)
s1.Name="s1"
affected,err = engine.Insert(s,s1)
if err !=nil {
log.Fatal(err)
return
} fmt.Println("插入不同表的一条记录受影响的行数:",affected) //插入不同表的多条记录
ss:=make([]User2,3)
ss[0].Name ="name"
ss[1].Name ="name"
ss[2].Name ="name" ss1:=make([]User3,2)
ss1[0].Name ="name"
ss1[1].Name ="name" affected,err = engine.Insert(ss,ss1)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入不同表的多条记录受影响的行数:",affected) //插入不同表的一条或多条记录
s0:= new(User2)
s0.Name="s0" ss0:=make([]User3,2)
ss1[0].Name ="name"
ss1[1].Name ="name" affected,err = engine.Insert(s0,ss0)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入不同表的一条或多条记录受影响的行数:",affected) } /*输出:
插入一条数据用Insert受影响的行数: 1
InsertOne受影响的行数: 1
插入同一个表的多条数据受影响的行数: 3
使用指针Slice插入多条记录受影响的行数: 3
插入不同表的一条记录受影响的行数: 2
插入不同表的多条记录受影响的行数: 5
插入不同表的一条或多条记录受影响的行数: 3
*/
这里需要注意以下几点:
- 这里虽然支持同时插入,但这些插入并没有事务关系。因此有可能在中间插入出错后,后面的插入将不会继续。此时前面的插入已经成功,如果需要回滚,请开启事务。
- 批量插入会自动生成
Insert into table values (),(),()的语句,因此各个数据库对SQL语句有长度限制,因此这样的语句有一个最大的记录数,根据经验测算在150条左右。大于150条后,生成的sql语句将太长可能导致执行失败。因此在插入大量数据时,目前需要自行分割成每150条插入一次。
xorm插入数据实例的更多相关文章
- JDBC插入数据实例
在本教程将演示如何在JDBC应用程序中向数据库的一个表中插入数据记录. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中插入数据记录. 要执行以下示例, ...
- MySQL 插入数据 通过命令提示窗口插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...
- MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
- 吴裕雄 10-MySQL插入数据
语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( ...
- 十一、MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
- 批量插入数据(基于Mybatis的实现-Oracle)
前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
实例1.取得MYSQL版本 复制代码 代码如下: # -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Non ...
- MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据
向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...
随机推荐
- Python爬虫 | Beautifulsoup解析html页面
引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...
- 有效的minidump(二)
函数MiniDumpCallback 如果要自定义MINIDUMP类型标志无法访问的MINIDUMP的内容,可以使用MiniDumpCallback函数.这是一个用户定义的回调,当MiniDumpWr ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- 让你的shell更体贴
使用shell的时候很多,特别是拉幕式终端,使用时更加方便,同时可以利用 echo "Did you know that:" ;whatis $(ls /bin | shuf -n ...
- 软件工程--团队项目选择与NABCD
目录 Part1:项目说明 项目基础 我们的目标 Part2:项目NABCD Need Approach Benefit Competitors Delivery & Data Deliver ...
- Spring Cloud Ribbon---微服务调用和客户端负载均衡
前面分析了Eureka的使用,作为服务注册中心,Eureka 分为 Server 端和 Client 端,Client 端作为服务的提供者,将自己注册到 Server 端,Client端高可用的方式是 ...
- Deep-learning augmented RNA-seq analysis of transcript splicing | 用深度学习预测可变剪切
可变剪切的预测已经很流行了,目前主要有两个流派: 用DNA序列以及variant来预测可变剪切:GeneSplicer.MaxEntScan.dbscSNV.S-CAP.MMSplice.clinVa ...
- ES6将两个数组合并成一个对象数组
需求 有这么两个数组 let metrodates = [ "2008-01", "2008-02", "2008-03",..ect ]; ...
- [E2E_L7 51CTO]进一步解析OpenVINO提供的例子并且独立出来(win+vs)
一.例子概览 上图中标红的都是可以运行的例子,在上一个博客中已经提示.其它的是工具等辅助内容. 例子可以简单分为3类,一类是 这个是和OpenCV相关的,可以参考: 一类是 这个是入门的,优先学习 余 ...
- 爬虫中BeautifulSoup4解析器
CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...