Go操作MySql Memache Mongodb
http://blog.woshifengzi.com/2014/12/12/go%E6%93%8D%E4%BD%9Cmysql-memcache-mongodb.html#mysql
操作mysql
go-sql-driver/mysql Example 上提供了用go操作mysql的两个例子。 例子中关于查询,一个是一次只取一个结果,一个是一次去多个结果,而且使用了prepare的方法,防止sql注入攻击。
此文中是参考上面例子,做的测试。
只取一个数据的例子
import(
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main(){
db, err := sql.Open("mysql","user:passwd@tcp(host:port)/db_name")
if err !=nil{
panic(err.Error())
}
defer db.Close()
stmtOut, err := db.Prepare("SELECT uid FROM mj_table limit 1")
if err !=nil{
panic(err.Error())
}
var uid string
err = stmtOut.QueryRow().Scan(&uid)
if err !=nil{
Log.Info("err to Scan: %s", err)
return
}
Log.Info("uid: %s", uid)
}
取多个数据的例子
...
rows, err := db.Query("select appid from mj_table limit 1")
if err !=nil{
Log.Info("No Err in select msyql: %s", err)
return
}
// Get column names
columns, err := rows.Columns()
if err !=nil{
panic(err.Error())
}
// Make a slice for the values
values := make([]sql.RawBytes, len(columns))
scanArgs := make([]interface{}, len(values))// 必须要有此类型
for i := range values {
scanArgs[i]=&values[i]
}
// Fetch rows
for rows.Next(){
// get RawBytes from data
err = rows.Scan(scanArgs...)
if err !=nil{
panic(err.Error())
}
var value string
for i, col := range values {
if col ==nil{
value ="NULL"
}else{
value =string(col)
}
Log.Info("name: %s, value: %s ", columns[i], value)
}
Log.Info("-----------------------------------")
}
...
操作mongodb
mgo是go语言操作MongoDb的驱动,因为接口比较丰富,官方文档看着也就比较长。
下面代码提供了建立连接、插入数据、查询、删除的操作
import(
"time"
"gopkg.in/mgo.v2"// mgo的包
"gopkg.in/mgo.v2/bson"
)
func main(){
var(
err error
)
//建立连接
mongoURL :="192.168.1.140,192.168.1.141:20001,192.168.1.141:20002"//可在配置文件中设置
maxWait := time.Duration(10* time.Second)
sess, err = mgo.DialWithTimeout(mongoURL, maxWait)
if err !=nil{
Log.Error("mgo.Dial err:%s", err)
panic(err)
}
sess.SetMode(mgo.Monotonic,true)
defer sess.Close()
//插入数据
//...构造要插入数据
db_name :="db"
table_name :="table"// 即mongodb中的Collection
dataBytes :=[]byte("{\"name\":\"jgj\"}")
var intf map[string]interface{}
err = json.Unmarshal(dataBytes,&intf)
//...执行入库操作
// new_sess := sess.Copy() // 可以复制一份回话,用新回话做操作
col := sess.DB(appid).C(classname)
err = col.Insert(intf)
if err !=nil{
Log.Error("db POST, db insert error, appid:%s, class:%s, data:%s, err:%s", appid, classname,string(dataBytes), err)
return
}
// 获取数据
var objectid interface{}
objectid =string("5486b4e08bb3c2659c000001")
err = col.FindId(objectid).One(&intf)
this.Data["json"]= intf
// this.ServeJson() // 显示
// 更新某个对象
err = col.Update(bson.M{"_id": objectid,"updatedAt": oldUpdatedAt}, intf)
// 删除某个对象
err = col.RemoveId(objectid)
// 查询
selectParam :="{\"name\":true, \"age\":true}"
var selectIntf map[string]bool
err = json.Unmarshal([]byte(selectParam),&selectIntf)
whereParam :="{\"or\":[{\"name\":\"jgj\"},{\"age\":\"29\"}]}"
var whereIntf := map[string]interface{}{}
err = json.Unmarshal([]byte(whereParam),&whereIntf)
//...json to bson. 代码未提供
ConvertBSON(whereIntf)
sortParam ="name,-age"
offset =1
limit =10
//...TODO 此处要有错误的判断
query := col.Find(whereIntf)
query = query.Sort(sortParam)
query = query.Select(selectIntf)
query = query.Skip(offset)
query = query.Limit(limit)
iter := query.Iter()
var result []bson.M = make([]bson.M,0)
intf := bson.M{}
for iter.Next(&intf){
result = append(result, intf)
intf = bson.M{}
}
iter.Close()
this.Data["json"]= result
this.ServeJson()
}
操作memcache
GoDoc中memcache的说明提供了操作的一些函数,没有给出实际的例子。
下面是测试的小例子:
import "github.com/bradfitz/gomemcache/memcache" (附件中已提供此包源代码)
con := memcache.New("ip:host")
if con ==nil{
Log.Info("Failed to connect Memcache")
}
item :=&memcache.Item{Key:"jgj",Value:[]byte("test_value"),Expiration:0}
err := con.Set(item)
if err !=nil{
Log.Info("failed to set item: %s", err)
}
item1, err := con.Get("jgj")
if err !=nil{
Log.Info("Failed to get item %s ", err)
return
}
Log.Info("get value: %s", item1.Value)
Go操作MySql Memache Mongodb相关推荐
- 1.MySQL与MongoDB的操作对比,以及区别
转自:https://www.cnblogs.com/chris-oil/p/4982490.html MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoD ...
- mac mysql 可视化工具_推荐3款好用的Redis、MySQL和MongoDB可视化管理工具
学习编程时,总会遇到各种各样的数据库,比如Redis.MySQL或MongoDB.这些数据库都有一个共同特点:全是基于命令行操作,没有可视化管理界面. 比如,开启数据库服务的命令是这样的. 首先,以管 ...
- 面试专题(Mysql及Mongodb)
2019独角兽企业重金招聘Python工程师标准>>> mysql面试题 1. 各个数据库存储引擎区别 mysql的存储引擎是针对表进行设置的,一个库的不同表可以设置不同的存储引擎 ...
- MySQL与MongoDB的区别
什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...
- python mysql工具类_Python工具类(一)—— 操作Mysql数据库
如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...
- MySQL导入MongoDB
一.MongoDB的导入导出 mongoDB的导入导出,分为mongoDB官方提供的工具类,和第三方的工具类.下面依次介绍下: 1.1.mongoDB提供的工具 1.1.1.mongoimport工具 ...
- 数据库之操作MySQL
数据库之操作MySQL 一.数据库 1.什么是数据库 数据库是数据管理的有效技术,是由一批数据构成的有序集合,这些数据被存放在结构化的数据表里.. 数据表之间相互关联,反映客观事物间的本质联系.. 数 ...
- RDS MySQL和Mongodb 物理备份文件.xb恢复到自建数据库
介绍: 本章内容为阿里云RDS Mysql和MongoDB 将物理备份文件.xb恢复到自建数据库的过程.环境搭建.错误解析 前提准备: 1: Centos7环境基础环境准备: IP映射.关闭防火墙.S ...
- 视觉中国的NoSQL之路:从MySQL到MongoDB
文 / 潘凡 起因 视觉中国网站(www.chinavisual.com)是国内最大的创意人群的专业网站.2009年以前,同很多公司一样,我们的CMS和社区产品都构建于PHP+Nginx+MySQL ...
最新文章
- 为选择屏幕的字段设置F4帮助
- 微软亚研院副院长周明:从语言智能到代码智能
- easyui-datagrid行数据field原样输出html标签
- 目前在线教育发展情况介绍
- det--求矩阵的行列式
- 2批量批量查询数据插入数据_你还在利用复制批量插入数据吗?一个oracle命令助你批量插入数据...
- 作者:宾军志(1976-),男,御数坊(北京)科技咨询有限公司联合创始人。...
- 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
- 使用Python检查密码安全程度
- 求最小公倍数的三种方法(C语言)
- android开发评论列表,Android类Reddit循环评论列表开发
- 每周一题3_杭电ACM_Tian Ji -- The Horse Racing
- mysql只有32位的吗_#金鸡奖##星辰大海演员计划#32位青年演员曝光,并非只有周冬雨斩获过金马奖...
- python爬虫之下载京东页面图片
- baidu卫兵世界杯智能提速 打破运营商OTT端阻力
- 这些强大到极致的iPhone自带App,个个都是一个顶十个好用
- WP手机升级到WP8.1之后一些功能的吐槽和没有Cortana,改变绿色图标的问题的解决方案以及怎样调戏Cortana
- 鸿蒙TouchEvent已实现单击、连续、长按功能,安卓也可以模仿着原理实现(网上绝大多未实现不动长按),这个支持不动长按事件
- HTML+CSS鲜花网页制作 DW静态网页设计 个人网页制作
- 推荐自媒体和文案相关神器(短视频与公众号)
热门文章
- 洛谷——P1421 小玉买文具
- ❤️《小黄鸭调试法》程序员必备技能!!!❤️
- 一个成型的awt所必须的frame组件
- 实验2-1-3 计算物体自由下落的距离 (5 分)
- CSS 用户界面样式
- Numpy的使用方法
- win10专业版开机画面模糊_Win10系统登录背景变模糊的两种恢复方法
- java 静态初始化数据_Java 静态数据初始化的示例代码
- windows使用markdown离线编写文章(可设置图床)
- python 对 list[list] 矩阵进行逆时针旋转90度 matrix = list(map(list, zip(*matrix)))[::-1]