python操作数据库
课件:Python与数据库交互
知识点一:mysql事务
关系型数据库的特性(原子,一致,隔离,持久)
#原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
原子性---是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性---是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
演示
start transaction; 开启事务
select * from new_tb_name;
insert into new_tb_name values (3,'hello',18);
commit; 提交成功
start transaction;
insert into new_tb_name values (5,'jack',11);
insert into new_tb_name values (6,'jack',110);
rollback; 撤销全部
select * from new_tb_name;
知识点二:python连接mysql
安装pymysql
pip install pymysql
import pymysql
# dbcomfig(ip 端口 用户名 密码 数据库 数据表 )
db_config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'qwe123',
'db':'python3',
'charset':'utf8',
}
conn = pymysql.connect(**db_config) # 获取链接对象
cur = conn.cursor() # 游标对象
print(cur) # 多少条数据
#
try:
sql = 'SELECT * FROM students'
# sql = 'insert into students(number,name,age) values ("20180199","haoyi54",22)' # 2
rv = cur.execute(sql) # 执行sql语句
print(cur.fetchone()) # 显示一条数据 next() 有点像
print(cur.fetchmany(2)) # 拿几条数据
resp = cur.fetchall() # 接收展示内容 少用 内存
# print(resp) # 显示所有的
except Exception as e:
print(e)
conn.rollback() # 报错才回滚 2
finally:
conn.commit() # 用链接对象调用的 2
cur.close() # 关闭游标。
conn.close() # 关闭连接 connection
python 默认使用事务的
eg:
import pymysql
db_config = {
'host':'127.0.0.1',
'port':3306,
'user':'root',
'password':'qwe123',
'db':'python3',
'charset':'utf8',
}
conn = pymysql.connect(**db_config) # 获取链接对象
with conn.cursor() as cur:
cur.execute('insert into students(number,name,age) values ("20180199","haoyi90",22)')
conn.commit()
# conn.rollback()
知识点二:python连接redis
redis:
pip install redis
import redis
redis-cli --raw 查看中文
# decode_responses = True 让redis返回的数据是str类型,如果不指定则结果为bytes. ‘中文’
red = redis.StrictRedis(host='127.0.0.1',decode_responses = True)
print(type(red.keys()))
print(red.keys())
string
# red.set('name','haha')
red.set('name','小柒叶')
ret = red.get('name')
print(ret)
print(ret.decode('utf8'))
# red.append('name',' lee')
# print(red.type('name'))
# red.delete('name') # 2
# print(red.get('name')) # 查看
# print(red.exists('name')) # 存在 返回 0和1 T F
# red.mset({'abc':123,'bcd':234})
# print(red.mget('abc','bcd'))
list
# red.rename('name','new_ex_name') # 改键名
# print(red.keys())
# red.lpush('list_name','g1','g2')
# red.lrem('list_name',0,'g1')
# print(red.lrange('list_name',0,-1))
# print(red.llen('list_name')) 长度
哈希
red.hset('hash_name','name','haoyi') # 键 域 值
print(red.hget('hash_name','name')) # haoyi
# red.hmset('hash_name',{'name1':'baye','name2':'jiuye'})
# print(red.hmget('hash_name','name','name1','name2'))
# print(red.hgetall('hash_name'))
set
# red.sadd('set_name',1,2,3,1,2)
# red.srem('set_name',3)
# print(red.smembers('set_name'))
# print(red.scard('set_name'))
zset
red.zadd('zzset_name',10.2,'g6') # 报错
# red.zadd('zzset_name',10,'g1',20,'g2')
print(red.zrange('zzset_name',0,-1))
# red.zrem('zzset_name','g2') # 删除 g2
print(red.zscore('zzset_name','g3')) # 查询分数
print(red.zcard('zzset_name')) # 两个
# print(red.flushdb()) # 当前数据库里面的键
知识点三:Python操作MongoDB
import pymongo # 导入模块
# 1.建立连接
collection.insert_one({'name':''})
sudo ufw allow 27017 更新
-----------------------------------------------------------
import pymongo
# systemctl start mongodb.service 开启服务
# 建立连接
client = pymongo.MongoClient('127.0.0.1',27017) # 可以省略
# 指定数据库
db = client['python3']
# 指定集合
my_col = db['students']
# 数据操作 (怎删改查)
# 增
# my_col.insert({'name':'haoyi','age':18})
# 增多
# my_col.insert_many([
# {'name':'haoyi3','age':18},
# {'name':'haoyi1','age':19},
# {'name':'haoyi2','age':20}
# ])
# 查
# res = my_col.find_one()
# print(res)
# res = my_col.find()
# print(res)
# for i in res:
# print(i)
# 改
# my_col.update_one({'name':'haoyi1'},{'$set':{'age':100}})
# 查看
# res = my_col.find_one({'name':'haoyi1'})
# print(res)
# 删 删除一个
res = my_col.delete_one({'name':'haoyi'})
print(res)
import pymongo
client = pymongo.MongoClient('127.0.0.1',27017)
db = client['mydb']
collection = db['student']
collection.insert_one({'name':'haoyi','age':18})
collection.insert_many([
{'name':'haoyi1','age':19},
{'name':'haoyi2','age':20},
])
for i in collection.find():
print(i)
print(collection.find_one({'name':'haoyi'}))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器