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 5305: [Haoi2018]苹果树 组合计数
一定要注意要乘阶乘,细节很多. code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s ...
- SVN 常用 下载仓库
仓库的基本使用: 1.管理仓库的人会给你一个SVN的仓库地址,如: https://192.168.2.98:8443/svn/建筑工程健康监测系统 2.然后就下载仓库里面的所有文件 3.对仓库做增删 ...
- (浙江金华)Day 1 组合数计数
目录 Day 1 组合计数 1.组合数 (1).C(n,m) 读作n选m,二项式系数 : (2).n个东西里选m个的方案数 不关心选的顺序: (3).二项式系数--->多项式系数: 2.组合数计 ...
- 干货 | 10分钟搞懂branch and bound(分支定界)算法的代码实现附带java代码
Outline 前言 Example-1 Example-2 运行说明 00 前言 前面一篇文章我们讲了branch and bound算法的相关概念.可能大家对精确算法实现的印象大概只有一个,调用求 ...
- SQL基础-约束&索引
一.约束 1.约束简介 约束(constraint): 表中数据的限制条件. 完整性 有效性 约束的种类: 主键约束 外键约束 唯一约束 检查约束 非空约束 2.主键约束 主键约束: 唯一标识表中每一 ...
- 微信小程序地图组件
index.wxml <map id="map" markers="{{markers}}" longitude="{{longitude}}& ...
- 【2019.12.04】SDN上机第6次作业
实验拓扑 通过图形化界面建立拓扑 先清除网络拓扑 sudo mn -c 生成Python语句 #!/usr/bin/python from mininet.net import Mininet fro ...
- Servlet使用反射机制
传统servlet存在的问题 每一个不同的请求都要写Servlet,导致整个项目servlet过多,不易维护 解决方案 同一个模块只写一个Servlet,然后每一个请求传一个参数,后台根据参数取调用不 ...
- C#中将xml文件反序列化为实例时采用基类还是派生类的问题
基类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- 用SC命令 添加或删除windows服务提示OpenSCManager 失败5
在安装命令行中安装 windowsOpenSCManager 失败5 的错误,原因是当前用户的权限不足,需要做的是在注册表 HKEY_LOCAL_MACHINE\Software\Microsof ...