原文地址:http://www.nnzhp.cn/archives/510
我们在写代码的时候,经常会操作数据库,增删改查,数据库有很多类型,关系型数据库和非关系数据库,这里咱们介绍一下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
|