beego-orm-sqlite
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的更多相关文章
- beego orm 忽略字段
忽略字段 设置 - 即可忽略 struct 中的字段 type User struct { ... AnyField string `orm:"-"` ... } beego or ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- 基于beego orm 针对oracle定制
目前golang的ORM对oracle支持都没有mysql那样完整,一个orm要同时兼容mysql和oracle由于在sql语法上区别,会使整orm变的非常臃肿. 本项目是在beego orm上修改, ...
- Golang beego ORM + CRUP 操作详解
构建beego Web 项目 首先构建一个beego 的web 项目,这个我们完全可以参考beego 官网中的开发文档,上面介绍的非常的详细,在这我就不给大家介绍,主要是介绍ORM ...
- beego orm操作mysql数据库
慢慢弄起来~~ 按官方操作文档试一下. 那个err重复和user编号问题,以后再弄.. package main import ( "fmt" "github.com/a ...
- beego orm mysql
beego框架中的rom支持mysql 项目中使用到mvc模式,总结下使用方式: models中 package models import ( //使用beego orm 必备 "gith ...
- beego——ORM使用方法
先来看一个简单示例: models.gp package main import ( "github.com/astaxie/beego/orm" ) type User stru ...
- beego orm
http://beego.me/docs/mvc/model/overview.md go get github.com/astaxie/beego/orm Simple Usage package ...
- beego框架学习--beego orm映射
什么是ORM 即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 ...
- beego orm的使用
在使用beego model 去操作数据库时 有一些疑惑 找到了一个比较好的博文 原文地址 : https://my.oschina.net/u/252343/blog/829912 (Kelvin ...
随机推荐
- synchronized锁详解
synchronized的意义 解决了Java共享内存模型带来的线程安全问题: 如:两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?(针对这个问题进行分析 ...
- MySQL DDL执行方式-Online DDL介绍
1 引言 大家好,今天与大家一起分享一下 mysql DDL执行方式. 一般来说MySQL分为DDL(定义)和DML(操作). DDL:Data Definition Language,即数据定义语言 ...
- 17. Fluentd输出插件:out_copy用法详解
copy即复制,out_copy的作用就是将日志事件复制到多个输出,这样就可以对同一份日志做不同类型的分析处理. out_copy内置于Fluentd,无需单独安装. 示例配置 <match p ...
- 工业互联网领域的企业,都已经接入了ERP或者MES系统了吗?
肯定不是得啊!之前的两化,后来的企业上云,到当下的智能制造.数字化转型,不都是想把制造业(也就是你说的工业互联网企业)往这个方向推么,ERP和MES是企业数字化的一部分,但不是全部,当然有的企业(小工 ...
- 垃圾回收机制GC
垃圾回收机制GC 我们已经知道,name = 'leethon'这一赋值变量的操作,是将变量与数据值相绑定. 而数据值是存储到内存中的,有时变量会重新赋值即绑定其他数据值,而使得原本的数据值无法通过变 ...
- for循环及range内置方法
目录 while循环补充说明 流程控制之for循环 range方法 rang实战案例 作业 """ 1.先写注释(思维逻辑和想法) 2.先考虑主体功能 在考虑附加功能 & ...
- Response对象页面重定向、时间的动态显示
Response对象 response对象主要用于对客户端的请求进行回应,将web服务器处理后的结果发回给客户端,封装了jsp产生的响应,并发送到客户端响应客户端的请求,请求的数据可以是各种数据类型, ...
- 齐博x1如何开启自定义标签模板功能
为安全起见,同时也为了避免用户随意添加风格导致默认模板不协调,系统默认关闭了类似V系列的自定义修改模板功能.如下图所示,默认是关闭的 你如果需要启用的话,把下面的代码,参考下图导进去后,就可以增加一个 ...
- goroutine&waitgroup下载文件
0.1.索引 https://blog.waterflow.link/articles/1663078266267 当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错.那么我么我们可以利用g ...
- <四>1:全面掌握Const的用法
const怎么理解? const修饰的变量不能够在作为左值!!初始化完成后,值不能被修改!! C 和C++中const 的区别? 在C程序中 test.c const int a; 只定义,不做初始化 ...