我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下python怎么操作mysql、redis和mongodb。
一、python操作mysql数据库 python3中操作mysql数据需要安装一个第三方模块,pymysql,使用pip install pymysql安装即可,在python2中是MySQLdb模块,在python3中没有MySQLdb模块了,所以使用pymysql。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
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); ", [("andashu",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()
# 获取最新自增ID
new_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)#需要指定游标的类型,字典类型
# 执行SQL
cursor.execute("select * from user;")
#获取返回结果,这个时候返回结果是一个字典
res = cursor.fetchone()#返回一条数据,如果结果是多条的话
print(res)
res2 = cursor.fetchall()#所有的数据一起返回
|
二、操作redis redis是一个nosql类型的数据库,数据都存在内存中,有很快的读写速度,python操作redis使用redis模块,pip安装即可
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import redis
r = 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\'))#批量获取key
r.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不存在的时候
#才会set
r.hmset(\'hname\',{\'k1\':\'v1\',\'k2\':\'v2\'})#批量设置哈希类型的key和value
r.hget(\'name\', \'key\')#获取哈希类型的值
print(r.hgetall(\'hname\'))#获取这个name里所有的key和value
r.hdel(\'hname\',\'key\')#删除哈希类型的name里面指定的值
print(r.keys())#获取所有的key
|