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 ...
随机推荐
- BZOJ 3451: Tyvj1953 Normal 点分治+FFT
根据期望的线性性,我们算出每个点期望被计算次数,然后进行累加. 考虑点 $x$ 对点 $y$ 产生了贡献,那么说明 $(x,y)$ 之间的点中 $x$ 是第一个被删除的. 这个期望就是 $\frac{ ...
- CLR内部异常(上)
当我们提到CLR里的“异常”,要注意一个很重要的区别.有通过如C#的try/catch/finally暴露给应用程序,并由运行时提供机制全权实现的托管异常.也有运行时自己使用的异常.大部分运行时开发人 ...
- NOI 2019 游记
day -1 去报了个到,顺便买了一大堆衣服. 感觉学校饭堂不太行. day 0 上午是开幕式,. 下午是笔试,顺利获得 \(100\) 分. day 1 先看题. 第一题看到 \(At^2+Bt+C ...
- mysql 提示ssl问题
问题信息如下: rements SSL connection must be established by default if explicit option isn't set. For comp ...
- VUE中常用的十大过滤器
在vue的学习过程中,我发现过滤器是一个很好用的工具,过滤器(Filters)来渲染数据是一种很有趣的方式.过滤器不能替代Vue中的methods.computed或者watch,不改变真正的data ...
- 获取当前服务的IP和端口号
package com.movitech.product.datahub.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...
- 工作发狂:Mybatis 中$和#千万不要乱用!
阅读本文大概需要 2.2 分钟. 作者:程序猿的内心独白 开头 这是一次代码优化过程中发现的问题,在功能优化后发现部分数据查不到出来了,问题就在于一条sql上的#和$. 下图为两条sql: 从图上可以 ...
- 【大数据作业九】安装关系型数据库MySQL 安装大数据处理框架Hadoop
作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 4.简述Hadoop平台的起源.发展历史与应用现状. 列举发展过程中 ...
- _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed
在Ubuntu18上使用交叉编译工具,报这个错.研究之下发现,工具的绝对路径过长,ubuntu18对其优化,修改路径,导致报错. 使用命令:export LC_ALL=C
- JAVA从服务器下载文件根据Url把多文件打包成ZIP下载
注意: 1. String filename = new String(“xx.zip”.getBytes(“UTF-8”), “ISO8859-1”);包装zip文件名不发生乱码. 2.一定要注意 ...