python操作常见数据库

在写代码的时候经常遇到要操作数据库,进行增删查改。目前比较流行的数据库有很多,有关系型数据库和非关系型数据库,下面描述常见的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说明文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容