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 ...
随机推荐
- learning java 推回输入流
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import ...
- [RN] React Native 下列表 FlatList 和 SectionList
1.FlatList FlatList组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. FlatList更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,Fla ...
- gulp+apache代理请求处理javascript跨域请求
apache设置(参考) 用 apache 的 mod_proxy 模块开启反向代理功能来实现: 1 修改 apache 配置文件 httpd.conf ,去掉以下两行前面 # 号 LoadModul ...
- 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令
没错就是这么神奇,名字相当噶性,thefuck.当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令. 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面 ...
- mysql 获取学生个人科目平均分
mysql> select * from test; +----+----------+-------+-----------+ | id | name | score | subject | ...
- iptables实现端口映射(本地和远程端口映射)
说明:需要将外网访问本地IP(192.168.75.5)的80端口转换为访问192.168.75.3的8000端口,这就需要用到iptables的端口映射 实现:1. 需要先开启linux的数据转发功 ...
- VBA 如何检测一个中文字符串是否包含在另一个字符串中
Sub test() aaa = "江苏省南京市建邺区水西门大街34号" If InStr(aaa, Then MsgBox "在里面" Else MsgBox ...
- linux升级python到2.7版本
linux的python安装包默认版本是2.6.6,yum程序默认也是依赖这个版本的python包的,但是其他一些程序如nodejs,却要的是2.7版本,因此必须要考虑升级后与yum的兼容问题.两步走 ...
- Linux目录结构和作用
转载自:https://blog.csdn.net/wangrongrongwq/article/details/79624797 [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat ...
- oracle 存储函数,更新库存
create procedure PRO_update_Goods_group_stock is v_min_stock , ); v_gg_stock , ); v_goods_no number; ...