Python与数据库交互

知识点一:mysql事务

知识点二:python链接mysql

知识点三:python链接redis

知识点一:mysql事务

    关系型数据库的ACID(原子性、一致性、隔离性与持久性)
    #一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
    #1 原子性
原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。可采用“A向B转账”这个例子来说明解释在DBMS中,默认情况下一条SQL就是一个单独事务,事务是自动提交的。只有显式的使用start transaction开启一个事务,才能将一个代码块放在事务中执行。

    #2 一致性
一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

    对银行转账事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT(账户)表中a和b的存款总额为2000

    #隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
简单说: 隔离性追求的是并发情形下事务之间互不干扰。
事务隔离分为不同级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
    #未提交读: 在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。
    #已提交读:只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。已提交读是SQL Server的默认隔离级别
    #可重复读: 像已提交读级别那样读数据,但会保持共享锁直到事务结束,
    #可串行读:工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围。这就阻止了新数据插入查询所涉及的范围。

    #持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

演示

begin;   #开启事物
select *from new_tb_name;
insert into new_tb_name values(3,'he11o',18);
commit;  #提交成功


begin;
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

#pip install pymysql


import pymysql

# 连接

db_config={
    "host": "127.0.0.1",
    "port": 3306,
    "user": "jianqi",
    "password": "wmf20030102",
    "db":"test",
}
# 获取链接对象
conn = pymysql.connect(**db_config)
# 创建游标
cur = conn.cursor()

try:
    sql = "insert into Student values ('37','fufu','男',21,'jk')"
    cur.execute(sql)

except Exception as e:
    print(e)
    conn.rollback()

else:
    conn.commit()
finally:
    cur.close()
    conn.close()

知识点二:python链接redis

#pip install redis

import redis

red=redis.StrictRedis(host="127.0.0.1",decode_responses=True)
#string
# red.set("name","捡起")
# ret = red.get("name")

red.append("name"," fufu")
print(red.get("name"))
red.delete("name")
print(red.get("name"))
print(red.exists("name"))

red.mset({"abc":123,"bcd":456})
print(red.mget("abc","bcd"))

red.rename("name","new_name")
print(red.keys())
#list

red.lpush("list_name","g1","g2")
red.lrem("list_name",0,"g2")
print(red.lrange("list_name",0,-1))
print(red.llen("list_name"))

#hash

red.hset("hash_name","name","jianqi")
print(red.hget("hash_name","name"))

red.hmset("hash_name",{"name1":"fufu","name2":"jianqi"})
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"))#2
#zset

red.zadd("zzet_name",{'g6':10.2})
print(red.zrange('zzet_name',0,-1))
print(red.zscore('zzet_name','g6'))
print(red.zcard("zzet_name"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值