我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下python怎么操作mysql、redis和mongodb。
 

、操作mysql

python3中操作mysql数据需要安装一个第三方模块,pymysql,使用pip install pymysql安装即可,在python2中是MySQLdb模块,在python3中没有MySQLdb模块了,所以使用pymysql。

import pymysql# 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8')# 创建游标cursor = conn.cursor()# 执行SQL,并返回收影响行数effect_row = cursor.execute("update students set name = 'niuhy' where id = 1;")# 执行SQL,并返回受影响行数#effect_row = cursor.execute("update students set name = 'niuhy' where id = %s;", (1,))# 执行SQL,并返回受影响行数effect_row = cursor.executemany("insert into students (name,age) values (%s,%s); ", [("hangyang",18),("12345",20)])#执行select语句cursor.execute("select * from students;")#获取查询结果的第一条数据,返回的是一个元组row_1 = cursor.fetchone()# 获取前n行数据row_2 = cursor.fetchmany(3)# 获取所有数据row_3 = cursor.fetchall()# 提交,不然无法保存新建或者修改的数据conn.commit()# 获取最新自增IDnew_id = cursor.lastrowid    print(new_id)# 关闭游标cursor.close()# 关闭连接conn.close()

上面的操作,获取到的返回结果都是元组,如果想获取到的结果是一个字典类型的话,可以使用下面这样的操作

import pymysql# 创建连接,指定数据库的ip地址,账号、密码、端口号、要操作的数据库、字符集conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='data',charset='utf8')# 创建游标cursor = conn.cursor()cursor = coon.cursor(cursor=pymysql.cursors.DictCursor)#需要指定游标的类型,字典类型# 执行SQLcursor.execute("select * from user;")#获取返回结果,这个时候返回结果是一个字典res = cursor.fetchone()#返回一条数据,如果结果是多条的话print(res)res2 = cursor.fetchall()#所有的数据一起返回


、操作redis

redis是一个nosql类型的数据库,数据都存在内存中,有很快的读写速度,python操作redis使用redis模块,pip安装即可

import redisr = redis.Redis(host='127.0.0.1',port=6379,db=0)#指定连接redis的端口和ip以及哪个数据库r.set('name', 'value')#set string类型的值r.setnx('name2', 'value')#设置的name的值,如果name不存在的时候才会设置r.setex('name3', 'value', 3)#设置的name的值,和超时时间,过了时间key就会自动失效r.mset(k1='v1',k2='v2')#批量设置值r.get('name')#获取值print(r.mget('k1','k2'))#批量获取keyr.delete('name')#删除值r.delete('k1','k2')#批量删除#======下面是操作哈希类型的r.hset('hname', 'key', 'value')#set 哈希类型的值r.hset('hname', 'key1', 'value2')#set 哈希类型的值r.hsetnx('hname','key2','value23')#给name为hname设置key和value,和上面的不同的是key不存在的时候#才会setr.hmset('hname',{'k1':'v1','k2':'v2'})#批量设置哈希类型的key和valuer.hget('name', 'key')#获取哈希类型的值print(r.hgetall('hname'))#获取这个name里所有的key和valuer.hdel('hname','key')#删除哈希类型的name里面指定的值print(r.keys())#获取所有的key


、操作mongodb

mongodb和redis一样,也是一个nosql类型的数据库,它和redis的区别是,redis把整个数据都放在内存,而mongodb是把数据放在磁盘上的。 python操作mongodb使用pymongo模块,pip安装即可,操作如下:

import pymongoconn = pymongo.MongoClient(host='211.149.218.16',port=27017)#连接mongodbdb = conn.szz#选择哪个数据库db.authenticate('admin','123456')#如果有账号密码的话,指定账号密码collection = db.stus#使用数据库里面哪个集合,就相当于mysql里面的表collection.drop()#删除指定的集合,也就是删除这个表stu={'name':'牛牛','age':38,'sex':'男'}stus = [{'name':'python', 'addr':'北京', 'sex':'未知', 'age':38 },{'name':'mongodb','addr':'USA','money':18.01,'age':20}]collection.save(stu)#插入单条数据collection.insert(stus)#插入单条和多条,如果是多条的话,传入的就是一个list=====比较操作符=======# $lt# 小于# $lte# 小于等于# $gt# 大于# $gte# 大于等于# $ne# 不等于$set 获取前面的结果集collection.update({'name':'牛牛'},{'name':'niuhy','age':20})#更新数据collection.update({'name':'牛牛'},{'$set':{'addr':'河南'}})#在原来数据的基础上修改collection.update({'name':'牛牛'},   {'$set':{'addr':'河南'}},   multi=True)#multi参数的作用是如果有多个结果的话,是否全部修改 collection.remove({'name':'牛牛'})#删除指定的数据,如果不传入参数,删除的是全部的数据collection.remove()#删除全部数据data = collection.find({'name':'mongodb'})#查询指定的数据all_data = collection.find()#不写参数就是查询所有的数据my_data = collection.find({'age':{'$gte':18}})#查询大于18岁的for d in my_data:#获取数据,所有查询数据都需要使用循环来获取print(d)#每个元素都是一个字典


©著作权归作者所有:来自51CTO博客作者mob604756fa4732的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 加班做的报表还被老板嫌弃?是因为你不会用大数据工具!
  2. PHP:oop->抽象类/接口/后期静态绑定/单例模式连接数据库 Db类中
  3. laravel获取IP地址的真实地理位置
  4. Python使用socket搭建TCP服务器(后期的客户端:GPRS模块)
  5. GPS NMEA协议,0183 定位数据格式 双模定位:GNXXX GPS+BD 完整版
  6. C++基础学习----->函数与各种数据结构
  7. java获取指定年月的开始时间与结束时间
  8. 获取当天最大或最小日期
  9. 全国各地车牌查询表-收录及时更新的应用数据

随机推荐

  1. Android View滑动
  2. android开启闪光灯
  3. 安卓课程二十二 ImageView的基本用法
  4. 升级到Android 10和gradle升级
  5. Android -- 重写android返回键
  6. Android http POST
  7. Android(安卓)8.1去除锁屏(MTK 平台)
  8. 我的Android进阶之旅------>Android电话
  9. Android(Gingerbread) Sensor Framework
  10. Android UI设计模式