dao.go

```

package dao

import (
"fmt"
"github.com/astaxie/beego/orm"
"html"
"strings"
"sync"
)

//constant metatable name reference
const (
MetaTableName = "meta"
)

// Meta metadata object
type Meta struct {
Key string `orm:"column(key); size(256); pk"`
Type string `orm:"column(type); size(32)"`
Value string `orm:"column(value); null; type(text)"`
}

type User struct {
UserId int `orm:"column(user_id); size(256); pk"`
UserName string `orm:"column(user_name); size(32)"`
UserPwd string `orm:"column(user_pwd); size(32);"`
UserPhone string `orm:"column(user_phone); size(32)"`
UserQQ string `orm:"column(user_qq); size(32);"`
UserCity string `orm:"column(user_city); size(32)"`
}

type UserExtra struct {
UserPhone string `orm:"column(user_phone); size(32)"`
UserQQ string `orm:"column(user_qq); size(32);"`
UserCity string `orm:"column(user_city); size(32)"`
}

// DBAccess is Ormer object interface for all transaction processing and switching database
var DBAccess orm.Ormer
var once sync.Once

// InitDBConfig Init DB info
func InitDBConfig(driverName, dbName, dataSource string) {
once.Do(func() {
if err := orm.RegisterDriver(driverName, orm.DRSqlite); err != nil {
fmt.Errorf("Failed to register driver: %v", err)
}
if err := orm.RegisterDataBase(
dbName,
driverName,
dataSource); err != nil {
fmt.Errorf("Failed to register db: %v", err)
}
// os.Chmod(dataSource, 0400)
// sync database schema
if err := orm.RunSyncdb(dbName, false, true); err != nil {
fmt.Errorf("run sync db error %v", err)
}
// create orm
DBAccess = orm.NewOrm()
if err := DBAccess.Using(dbName); err != nil {
fmt.Errorf("Using db access error %v", err)
}
})
}

// SaveMeta save meta to db
func SaveMeta(meta *Meta) error {
meta.Value = html.EscapeString(meta.Value)
_, err := DBAccess.Insert(meta)
if err == nil || IsNonUniqueNameError(err) {
return nil
}
return err
}

// IsNonUniqueNameError tests if the error returned by sqlite is unique.
// It will check various sqlite versions.
func IsNonUniqueNameError(err error) bool {
str := err.Error()
if strings.HasSuffix(str, "are not unique") || strings.Contains(str, "UNIQUE constraint failed") || strings.HasSuffix(str, "constraint failed") {
return true
}
return false
}

//// DeleteMetaByKey delete meta by key
//func DeleteMetaByKey(key string) error {
//
// _, err := DBAccess.QueryTable(MetaTableName).Filter("key", key).Delete()
// return err
//}
//func DeleteMetaByType(typeStr string) error {
// _, err := DBAccess.QueryTable(MetaTableName).Filter("type", typeStr).Delete()
// return err
//}
//
//// UpdateMeta update meta
//func UpdateMeta(meta *Meta) error {
// meta.Value = html.EscapeString(meta.Value)
// _, err := DBAccess.Update(meta) // will update all field
// return err
//}

// InsertOrUpdate insert or update meta
func InsertOrUpdate(user *User) error {
_, err := DBAccess.Raw("INSERT OR REPLACE INTO users (user_id, user_name, user_pwd, user_phone, user_qq, user_city) VALUES (?,?,?,?,?,?)", user.UserId, user.UserName, user.UserPwd, user.UserPhone,user.UserQQ, user.UserCity).Exec() // will update all field
return err
}

// InsertOrUpdate insert or update meta
//func InsertOrUpdate(user *UserModel) error {
// _, err := DBAccess.Raw("INSERT OR REPLACE INTO users (user_id, user_name, user_pwd) VALUES (?,?,?)", user.UserId, user.UserName, user.UserPwd).Exec() // will update all field
// return err
//}

//// QueryMeta return only meta's value, if no error, Meta not null
//func QueryMeta(key string, condition string) (*[]string, error) {
// meta := new([]Meta)
// _, err := DBAccess.QueryTable(MetaTableName).Filter(key, condition).All(meta)
// if err != nil {
// return nil, err
// }
//
// var result []string
// for _, v := range *meta {
// result = append(result, html.UnescapeString(v.Value))
// }
// return &result, nil
//}

```

main.go

```

package main

import (
"dbTest/work/dao"
"fmt"
"github.com/astaxie/beego/orm"
"sync"
"time"

//Blank import to run only the init function
_ "github.com/mattn/go-sqlite3"
)

func main() {

//defer func() {
// if r := recover(); r != nil {
// fmt.Println("recover", r)
// }
//}()

//pod := `{"metadata":{"name":"python1-test-probe1-d4893279-1136-4eac-9808-98f7d0d541ff","namespace":"websocket","selfLink":"/api/v1/namespaces/websocket/pods/python-test-probe1-d4893279-1136-4eac-9808-98f7d0d541ff","uid":"d4893279-1136-4eac-9808-98f7d0d541ff","resourceVersion":"3903081","creationTimestamp":"2022-02-24T12:43:49Z"},"spec":{"volumes":[{"name":"localtime","hostPath":{"path":"/etc/localtime","type":""}},{"name":"ha-mailbox_container-0","hostPath":{"path":"/run/docker/ha-mailbox/container-0_python-test-probe1-d4893279-1136-4eac-9808-98f7d0d541ff","type":""}}],"containers":[{"name":"container-0","image":"fd.fusiondirector.huawei.com/library/pyhton-test:7.0","resources":{"limits":{"cpu":"1","memory":"512Mi"},"requests":{"cpu":"250m","memory":"512Mi"}},"volumeMounts":[{"name":"localtime","readOnly":true,"mountPath":"/etc/localtime"},{"name":"ha-mailbox_container-0","mountPath":"/var/local/ha-mailbox"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent","securityContext":{"capabilities":{},"privileged":false}}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","hostNetwork":true,"securityContext":{},"imagePullSecrets":[{"name":"fusion-director-docker-registry-secret"}],"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute"},{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute"},{"key":"node.kubernetes.io/network-unavailable","operator":"Exists","effect":"NoExecute"}]},"status":{}}`
orm.RegisterModel(new(dao.User))
dao.InitDBConfig("sqlite3", "default", "D:\\huawei-oj\\test\\work\\gwx.db")

//userExtra := dao.UserExtra{
// UserPhone: "123456",
// UserQQ: "123",
// UserCity: "123",
//}

user := dao.User{
UserId: 1,
UserName: "test",
UserPwd: "123456",
UserPhone: "123456",
UserQQ: "123",
UserCity: "123",
}

wg := sync.WaitGroup{}
wg.Add(1)
go func() {
select {
case <-time.After(2 * time.Second):
fmt.Println("time is over")
wg.Done()
}
}()
// 数据库操作
err := dao.InsertOrUpdate(&user)
if err != nil {
fmt.Println(err)
}
fmt.Println(err)
fmt.Println("end do something")

wg.Wait()

}

```

beego-orm-sqlite的更多相关文章

  1. beego orm 忽略字段

    忽略字段 设置 - 即可忽略 struct 中的字段 type User struct { ... AnyField string `orm:"-"` ... } beego or ...

  2. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  3. 基于beego orm 针对oracle定制

    目前golang的ORM对oracle支持都没有mysql那样完整,一个orm要同时兼容mysql和oracle由于在sql语法上区别,会使整orm变的非常臃肿. 本项目是在beego orm上修改, ...

  4. Golang beego ORM + CRUP 操作详解

      构建beego Web 项目         首先构建一个beego 的web 项目,这个我们完全可以参考beego 官网中的开发文档,上面介绍的非常的详细,在这我就不给大家介绍,主要是介绍ORM ...

  5. beego orm操作mysql数据库

    慢慢弄起来~~ 按官方操作文档试一下. 那个err重复和user编号问题,以后再弄.. package main import ( "fmt" "github.com/a ...

  6. beego orm mysql

    beego框架中的rom支持mysql 项目中使用到mvc模式,总结下使用方式: models中 package models import ( //使用beego orm 必备 "gith ...

  7. beego——ORM使用方法

    先来看一个简单示例: models.gp package main import ( "github.com/astaxie/beego/orm" ) type User stru ...

  8. beego orm

    http://beego.me/docs/mvc/model/overview.md go get github.com/astaxie/beego/orm Simple Usage package ...

  9. beego框架学习--beego orm映射

    什么是ORM 即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 ...

  10. beego orm的使用

    在使用beego model 去操作数据库时 有一些疑惑  找到了一个比较好的博文 原文地址 : https://my.oschina.net/u/252343/blog/829912 (Kelvin ...

随机推荐

  1. 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本

    06_Linux基础-NGINX和浏览器.网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本 一 ...

  2. Linux系统启动报错No bootable device解决步骤

    CSDN文章地址点击此处 磁盘的 MBR 表损坏 实验环境准备工作 查看分区类型及磁盘位置信息点击此篇 首先备份虚拟机A上的 MBR 表 dd if=/dev/vda of=MBR bs=512 co ...

  3. Linux安装RabbitMQ教程(文件下载地址+安装命令+ 端口开放 + 用户创建 +配置文件模板+端口修改)

    前言 1.安装RabbitMQ前需先安装erlang, 且两者需要版本对应, 否则无法正常启动RabbitMQ (本教程使用22.0.7版本的erlang和3.8.6版本的Rabbitmq) 版本对应 ...

  4. Elastic:为Elasticsearch启动https访问

  5. Beats:在 Beats 中实现动态 pipeline

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/107127197 在我们今天的练习中,我们将使用 Metricbeat 来同时监控 kib ...

  6. 使用coverlet统计单元测试的代码覆盖率

    单元测试是个好东西, 可以在一定程度上兜底 虽然写单元测试这件事情非常麻烦 但是好的单元测试可以显著提高代码质量, 减少bug, 避免无意中的修改导致其他模块出错 写测试用例的过程中, 靠人力去确保所 ...

  7. 手把手教你玩转 Gitea|使用 Docker 安装 Gitea

    使用 Docker 安装 Gitea 的过程非常简单的,堪比"一键式"安装.Gitea 安装使用系列教程将会从多种方式进行全方位的实操演示. 视频演示中使用腾讯云实验环境安装 Do ...

  8. Springboot 之 Mybatis-plus 多数据源

    简介 Mybatis-puls 多数据源的使用,采用的是官方提供的dynamic-datasource-spring-boot-starter包的 @DS 注解,具体可以参考官网: https://g ...

  9. 移动端Vant组件库REM适配

    REM适配 基础配置 在页面布局之前,对REM进行配置,以适配移动端特点. 官方参考 Vant文档---->快速上手---->进阶用法---->Rem适配----> Vant ...

  10. 魔改xxl-job,彻底告别手动配置任务!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. xxl-job是一款非常优秀的任务调度中间件,轻量级.使用简单.支持分布式等优点,让它广泛应用在我们的项目中,解 ...