美文网首页
python操作常见数据库

python操作常见数据库

作者: Evtion | 来源:发表于2017-10-16 19:12 被阅读0次

    在写代码的时候经常遇到要操作数据库,进行增删查改。目前比较流行的数据库有很多,有关系型数据库和非关系型数据库,下面描述常见的MySQL、redis和MongoDB数据库的python操作。

    • 1.操作MySQL:
      • python操作MySQL数据库需要安装第三方模块进行操作,python2中可以直接安装MySQLdb模块,可以直接通过 pip install MySQLdb进行安装使用。而在python3中没有了MySQLdb模块,可以用pymysql进行替换,通过pip install pymysql安装。下面介绍在python3中使用pymysql。
    import pymysql
    # 创建连接,指定数据库的ip地址,端口号,账号,密码,数据库,编码格式
    conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='database',charset='utf-8')
    # 创建游标
    cursor=conn.cursor()
    # 执行SQL语句,并返回影响行数
    effect_row=cursor.execute("update employees set name='employees1' where sid=0102")
    effect_row=cursor.executemany("insert into employees (name,age)values(%s,%s);",[("zhangsan",20),("Lisi",21)])
    # 执行查询语句
    cursor.execute("select * from employees;")
    # 获取第一条数据
    data=cursor.fechone()
    # 获取多少条数据
    datas=cursor.fetchmany(100)
    # 获取所有的数据
    data=cursor.fetchall()
    # 提交所有操作修改
    conn.commit()
    cursor.close() # 关闭游标
    conn,close() #关闭连接
    # 获取自增id
    lastId=cursor.lastrowid
    
    • 2.一般情况之下,pymysql创建的cursor游标都是返回一个操作结果的元组,如果想要操作的结果返回的是字典格式,可以指定创建的cursor游标格式,其他的操作与上面相类似。
    import pymysql
    # 创建连接,指定数据库的ip地址,端口号,账号,密码,数据库,编码格式
    conn=pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='database',charset='utf-8')
    # 创建游标
    cursor=conn.cursor(cursor=pymsql.cursors.DictCursor)
    
      1. 操作Redis数据库:
      • redis是noSQL数据库,基于计算机内存,拥有很快的读写速度,之前做ip代理池时候,利用redis数据库的队列结构很适合做入列与出列的操作。下面是python操作Redis数据库的操作,python操作redis的主要模块是redis
    import redis
    redis=redis.Redis(host="localhost",port="6379",db=1)
    # 设置string类型的值
    redis.set("name","value")
    # 设置key为name的值,如果name不存在,才会进行设置
    redis.setnx("name","value")
    # 设置key为name的值以及过期时间,过期之后,key值即将失效
    redis.setex("name","value",3)
    # 批量设置值
    redis.mset(k1="v1",k2="v2")
    # 获取值
    redis.get("name")
    # 批量获取值
    redis.mget("name1","name2")
    # 删除值
    redis.delete("name")
    # 批量删除值
    redis.delete("name1","name2","name3")
    # 操作哈希类型值
    redis.hset("hname","name","value")
    # 给name为hname设置name和value,当name不存在时,才设置set
    redis.hsetnx("hname","name","value")
    # 批量设置哈希类型·
    redis.hmset("hname",{"name1":"value1","name2":"value2"})
    # 获取哈希类型的值
    redis,hget("hname","name")
    # 获取hname下的所有name和value
    redis.hgetall("hname")
    # 删除哈希类型的name里面指定的值
    redis.hdel("hname","name")
    # 获取所有的值
    redis.keys()
    
    • 3.Mongodb数据库同样是NoSQL数据库,Mongodb是基于bson格式的数据库,之前写了很多的爬虫案例都是直接使用mongodb数据库进行保存。所以现在记录一下python操作mongdb数据的常用模块pymongo。首先可以通过pip工具进行下载pymongo。
     # 连接mongodb数据库
    import pymongo
    client=pymongo.MongoClient(host="127.0.0.1",port=27017)
    # 也可以直接使用以下的方式进行创建client
    client=MongoClient("mongodb://localhost:27017")
    # 指定要使用的数据库
    db=client["dbname"]
    db=client.dbname
    # 指定使用的集合,类似于mysql数据库的表结构
    collection=db.collectionName
    collection=db["collectionName"]
    # 如果mongodb数据库以授权验证的形式启动,还需要进行数据库验证
    db.authenticate(username,password)
    # 数据形式
    data={
      "id":"1010101",
      "name":"kiwis"
      "age":20
    }
    # 插入数据,插入数据,会返回一个_id值,如果没有设置这个字段值,则mongodb数据库会自动生成一个object_id的值返回
    collection.insert(data)
    # 插入多条数据,返回_id的集合
    collection.insert([data1,data2])
    # python3的官方pymongo推荐使用insert_one和insert_many方法插入一条或多条数据
    #insert_one返回的值不再是_id值,而是InsertOneResult对象,可以通过对象获取insert_id值(相当于_id)
    collection.insert_one(data)
    # insert_many像上面一样可以通过列表的形式进行传递,insert_many方法返回的类型是InsertManyResult对象,通过其inserted_ids属性可以获取插入数据的_id列表
    coilection.insert_many([data1,data2])
    # 数据查询,find_one与find分别可以查询一条结果与多条结果数据
    # find_one返回一条字典类型的数据
    collection.find_one({"name":"kiwis"})
    # find返回多条数据,返回的结果是Cursor类型,相当于一个generator生成器,如果需要迭代数据,每一个结构都是字典类型的数据
    collection.find({})
    # 例子迭代数据结果
    datas=collection.find({})
    for data in datas:
      print(data["name"])
    # 查询的其他条件,下面是查询name为kiwis,age大于20的数据结果
    collection.find({"name":"kiwis","age":{"$gt":20}})
    # 其他的筛选条件如下所示
    # $ lt小于{"age":{"$lt":20}}
    # $gt大于{"age":{"$gt":20}}
    # $lte小于等于{"age":{"$lte":20}}
    # $gte大于等于{"age":{"$gte":20}}
    # $ne不等于{"age":{"$ne":20}}
    # $in 在范围之内{"age":{"$in":[10,30]}}
    # $nin 不在范围之内{"age":{"$nin"}}
    # $regex 正则表达式筛选{"name":{"$regex":"kiwis$"}},表示已kiwis结尾的name值的数据
    # $exists判断属性存在与否 {"name":{"$exists":True}}表示查询name属性存在值的数据
    # $type属性的类型值 {"name":{"$type":String}} name的类型为string
    # $mod表示数字操作 {"age":{"$mod":[4,1]}}表示除4余1的数据项
    # $text文本查询{"$text":{"$search":"kiwis"}} text类型数据的属性包含kiwis的字符串
    # $where 条件查询{"$where":"studentName==employeesName"}
    # 对查询到的数据进行计数
    collection.find({"age":{"$lt":20}}).count()
    collection.find({}).count()
    # 对查询到的书籍进行排序操作
    collection.find({}).sort("name",pymongo.ASCENDING)
    # 如果想跳过几个数据,进行取值,可以直接使用skip
    collection.find({}).skip(1)
    # 获取到的数据进行数量的取值限制limit
    collection.find({}).skip(1).limit(2)
    collection.find({}).sort("age",pymongo.ASCENDING).skip(1).limit(2)
    # 对数据进行更新
    collection.update({"name":"kiwis"},{"$set":{"age":23,"name":"laternkiwis"}})
    collection.update({"name":"kiwis"},{"$set":{"age":23}})
    # 如果有多个结果,是否全部修改
    collection.update({"name":"kiwis"},{"$set":{"age":23}},multi=True)
    # 删除全部数据
    collection.remove({})
    # 删除指定的数据
    collection.remove({"name":"kiwis"})
    

    上面总结都是常见的python操作数据方法,具体参照各个模块的API说明文档

    相关文章

      网友评论

          本文标题:python操作常见数据库

          本文链接:https://www.haomeiwen.com/subject/eurkyxtx.html