前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用GORM判断数据库中数据是否存在异常?

如何使用GORM判断数据库中数据是否存在异常?

原创
作者头像
TSINGSEE青犀视频
修改于 2021-02-23 02:10:42
修改于 2021-02-23 02:10:42
4.3K00
代码可运行
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频
运行总次数:0
代码可运行

在编译EasyNVR的时候,我们为了防止数据库内的表重复,使用了sqlite3_exec函数来判断一个表是否存在。但在EasyDSS中,我们使用的是GORM方式。ORM是Golang目前比较热门的数据库ORM操作库,对开发者比较友好,使用也方便简单。在EasyDSS在调用该方式过程中,出现了以下错误:

具体函数代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 根据主键,判断是否存在
func (impl *BaseDaoImpl) Exists(id string) bool {
   dataType := reflect.TypeOf(impl.TableStruct)
   data := reflect.New(dataType)
 
   rowsAffects := impl.fromTable().First(&data, impl.WherePrimaryKey, id).RowsAffected
 
   if rowsAffects == 0 {
      return false
   }
 
   return true
}

可以看到以上代码使用了First函数查询数据,查看对应的描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// First find first record that match given conditions, order by primary key

说明此函数需要使用传入主键,才能解决此问题,因此我们需要将data数据传入主键。但是代码中因为data为反射出来的数据添加id数据不够方便,因此直接使用Find函数代替First函数,即解决此问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 根据主键,判断是否存在
func (impl *BaseDaoImpl) Exists(id string) bool {
   dataType := reflect.TypeOf(impl.TableStruct)
   data := reflect.New(dataType)
 
   rowsAffects := impl.fromTable().Find(&data, impl.WherePrimaryKey, id).RowsAffected
 
   if rowsAffects == 0 {
      return false
   }
 
   return true
}

随后检查,该模块可以正常使用。

如果大家想了解我们在EasyNVR上的实现过程,可以阅读此文:EasyNVR使用sqlite3如何判断一个表是否在数据库中已经存在。关于其他TSINGSEE青犀视频流媒体服务器的相关解决方案,欢迎访问TSINGSEE青犀视频官方网站。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用iOS原生sqlite3框架对sqlite数据库进行操作
      sqlite数据库是一种小型数据库,由于其小巧与简洁,在移动开发领域应用深广,sqlite数据库有一套完备的sqlite语句进行管理操作,一些常用的语句和可视化的开发工具在上篇博客中有介绍,地址如下:
珲少
2018/08/15
2.3K0
使用iOS原生sqlite3框架对sqlite数据库进行操作
Go gorm
在后端开发上,通常都要与资料库做操作(新增、修改、删除、查找),后端会撰写 SQL 语句,并且透过一些工具或套件(例如:pymysql)向 SQL 资料库来做沟通。而撰写原生 SQL 的缺点为:
f1sh
2024/07/29
2460
EasyNVR数据库更换为Mysql,服务无法启动该如何解决?
EasyNVR视频平台支持设备以RTSP/Onvif的协议接入,可对外分发RTSP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式的视频流,在视频能力上,EasyNVR可以实现实时视频直播、录像、检索与回放、存储、视频分发等视频能力服务,在安防监控行业内作为能力服务层,有着广泛的应用,比如校园、水利、交通、工地、工厂等等场景。
TSINGSEE青犀视频
2022/03/16
1.8K0
EasyNVR数据库更换为Mysql,服务无法启动该如何解决?
如何使用sqlite3如何判断一个表是否在数据库中已经存在?
新版的EasyNVR默认都是使用的sqlite数据库,sqlite数据库占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,并且能够支持Windows/Linux/Unix等主流的操作系统,同时能够跟很多程序语言相结合。
TSINGSEE青犀视频
2021/02/07
7.7K0
手把手带你从0搭建一个Golang ORM框架(全)!
导语 | 当我深入的学习和了解了GORM、XORM后,我觉得它们不够简洁和优雅,有些笨重,有很大的学习成本。本着学习和探索的目的,于是我自己实现了一个简单且优雅的go语言版本的ORM。本文主要从基础原理开始介绍,到一步一步步骤实现,继而完成整个简单且优雅的MySQL ORM。 一、前置学习 (一)为什么要用ORM 我们在使用各种语言去做需求的时候,不管是PHP,Golang还是C++等语言,应该都接触使用过用ORM去链接数据库,这些ORM有些是项目组自己整合实现的,也有些是用的开源的组件。特别在1个
腾讯云开发者
2021/12/30
1.4K0
手把手带你从0搭建一个Golang ORM框架(上)!
导语 | 当我深入的学习和了解了GORM、XORM后,我觉得它们不够简洁和优雅,有些笨重,有很大的学习成本。本着学习和探索的目的,于是我自己实现了一个简单且优雅的go语言版本的ORM。本文主要从基础原理开始介绍,到一步一步步骤实现,继而完成整个简单且优雅的MySQL ORM。 一、前置学习 (一)为什么要用ORM 我们在使用各种语言去做需求的时候,不管是PHP,Golang还是C++等语言,应该都接触使用过用ORM去链接数据库,这些ORM有些是项目组自己整合实现的,也有些是用的开源的组件。特别在1个
腾讯云开发者
2021/12/28
7790
Go语言 orm库之gorm
GORM是一个比较流行且功能齐全的orm库,主要有以下特性 全功能 ORM 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持 Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Context,预编译模式,DryRun 模式 批量插入,FindInBatches,Find/Create with Ma
孤烟
2020/12/07
1.2K0
从零实现ORM框架GeoORM-对象表结构映射-02
本系列源码: https://gitee.com/DaHuYuXiXi/geo-orm
大忽悠爱学习
2022/09/27
9430
Golang数据库编程之GORM库入门
安装GORM非常简单,使用go get -u就可以在GOPATH目录下安装最新GROM框架。
码农编程进阶笔记
2022/02/17
1.8K0
C++编程库与框架实战——SQLite3数据库引擎
SQLite是可以实现类似于关系型数据库中各种操作的事务性SQL数据库引擎,可以为应用程序提供存储于本地的嵌入式数据库,帮助应用程序实现轻量级的数据存储。
Coder-ZZ
2024/06/06
1.4K0
C++编程库与框架实战——SQLite3数据库引擎
EasyCVR级联后下级设备IP变化上级EasyCVR不变化的问题排查
EasyCVR的级联功能是将我们上面的通道通过国标标准的sip协议推送到上级去的一种方式,但是不同的上级平台对接设置上都有各自的特点,我们在配置的时候还需要根据不同平台的属性进行调整。
TSINGSEE青犀视频
2021/10/20
3350
EasyCVR级联后下级设备IP变化上级EasyCVR不变化的问题排查
使用 gorm.DefaultTableNameHandler 可能存在的问题
有这样的业务场景, 线上一个表 tablea, 生产环境还有一个镜像表 tablea_mirror, 现在 你需要当请求中有一些 tag 标识的时候,访问 tablea_mirror 表,有时候会用到 DefaultTableNameHandler
王小明_HIT
2021/12/20
1.4K0
GORM CRUD 10 分钟快速上手
ORM(Object Relational Mapping),中文名为对象关系映射。
恋喵大鲤鱼
2023/10/12
7850
学习gorm系列五:gorm中的核心数据结构
今天咱们一起来学习下gorm中的几个核心数据结构。通过了解gorm底层的数据结构,能够让我们了解gorm底层的实现,以便更好的使用gorm。
Go学堂
2023/11/01
5010
学习gorm系列五:gorm中的核心数据结构
C语言实例_调用SQLITE数据库完成数据增删改查
SQLite是一种轻量级的关系型数据库管理系统(RDBMS),它是一个开源的、零配置的、服务器端的、自包含的、零管理的、事务性的SQL数据库引擎。它被广泛应用于嵌入式设备、移动设备和桌面应用程序等领域。
DS小龙哥
2023/08/14
8260
C语言实例_调用SQLITE数据库完成数据增删改查
手把手教你学之golang反射(上)
orm这个概念相信同学们都非常熟悉,尤其是写过rails的同学,对active_record的强大肯定深有体会(得益于的method_missing和define_method方法,少写了海量代码),所以对orm我就不过多介绍了。本文要实现的orm只提供基本的CRUD(增删改查)和transaction(事务)功能,核心代码控制在300行左右。 如果想手把手照着写,需要先做一些准备工作。
李海彬
2020/11/23
6740
手把手教你学之golang反射(上)
从零实现ORM框架GeoORM-记录新增和查询-03
本系列源码: https://gitee.com/DaHuYuXiXi/geo-orm
大忽悠爱学习
2022/09/28
1.1K0
Gorm实战,轻松掌握数据库增删改查技巧!
CRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建、查询、更新和删除操作。
贾维斯Echo
2024/01/12
3.6K0
Golang框架实战-KisFlow流式计算框架(12)-基于反射自适应注册FaaS形参类型
接下来我们来增强KisFlow中Function对业务数据处理的聚焦,将之前Function的写法:
刘丹冰Aceld
2024/07/23
1240
百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12
    Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复的SQL语句,ORM上手简单,通用性较高,但是在性能层面略有损耗,Gorm的底层是结构体对象,关于结构体,请移玉步至:你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06。
用户9127725
2022/09/23
7290
推荐阅读
相关推荐
使用iOS原生sqlite3框架对sqlite数据库进行操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验