小白学Python---用python操作数据库

python操作MySQL

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
不同的数据库你需要下载不同的DB API模块,这里使用的MySQL中的pymysql模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:

  • 引入 API 模块。
  • 获取与数据库的连接。
  • 执行SQL语句和存储过程。
  • 关闭数据库连接。
# -*- coding:utf-8 -*-
import pymsql

# 1、连接,以下是连接本地的MySQL,如果连接阿里云服务器的database,host的ip要改变
db = pymysql.Connect(
    host='localhost',
    user='root',
    passwd='xxxxxx',
    db='scc',
    port=3306,
    charset='utf8')

# 2、获取游标
cursor = db.cursor()

#3、执行sql语句
try:
        sql = ''' delete from tbstudent where stuid = "1020" '''
        cursor.execute(sql)
        db.commit()
except:
        #事务回滚,即出现错误后,不会继续执行,而是回到程序未执行的状态,原先执行的也不算了
        db.rollback()

db.close()

python操作MySQL,Redis

习题:输入用户名和密码,先去redis查看是否匹配,如果不匹配进入本地MySQL查看是否匹配,如果匹配则刷新redis里面的存储记录。

# -*- coding:utf-8 -*-

import sys
import pymysql
import redis

def con_mysql(sql):
    db = pymysql.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = 'xxxx',
        port = 3306,
        db = 'scc',
        charset = 'utf8')

    cursor = db.cursor()
    cursor.execute(sql)
    data = cursor.fetchall()
    db.close()

    return data

def con_redis(name, passwd):
    r = redis.Redis(host='x.x.x.x', port=6379, password='12345')
    r_name = r.hget('user','name')
    r_passwd = r.hget('user','passwd')
    # 得到是byte类型,需要解码
    r_name = r_name.decode('utf8')
    r_passwd = r_passwd.decode('utf8')
    if name == r_name and passwd == r_passwd:
        return True, '登陆成功' #返回一个元组
    else:
        return False, '登录失败'


if __name__ == '__main__':
    # 获取传入的姓名和密码参数
    name = sys.argv[1]
    passwd = sys.argv[2]
    # 传入redis中,进行校验
    result = con_redis(name, passwd)
    if not result[0]:
        # 登录失败,查询数据库
        sql = '''select * from stu where name="%s" and passwd="%s" ''' % (name, passwd)
        data = con_mysql(sql)
        if data:
            r = redis.Redis(host='x.x.x.x', port=6379, password='12345')
            r.hset('user', 'name', name)
            r.hset('user', 'passwd', passwd)
            print('刷新redis,登录成功')
        else:
            print('用户名和密码错误')
    else:
        print('redis中数据正确,登录成功')            

Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)订阅消息,客户端可以订阅任意数量的频道。
下图展示了频道channel1,以及订阅这个频道的三个客户端——client2,client5,client1之间的关系:
1341301-20180421142308037-1693085565.png
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
1341301-20180421142430142-838101134.png
实例演示:

# 建立channel
# -*- coding:utf-8 -*-

import redis

class RedisBase(object):

    def __init__(self):

        self.__conn = redis.Redis(host='119.23.255.177', port=6379, password='12345')
        self.pub = 'test'
        self.sub = 'test'

    # 发布
    def publish_msg(self,msg):
        # publish 指定channel, message,用于将信息发送到指定的频道。
        self.__conn.publish(self.pub, msg)

    # 订阅
    def subscribe_msg(self):

        pub = self.__conn.pubsub()
        pub.subscribe(self.pub)
        pub.parse_response()
        return pub
# 建立订阅者
# -*- conding:utf-8 -*-

from channel import RedisBase

obj = RedisBase()
redis_sub = obj.subscribe_msg()

while True:
    msg = redis_sub.parse_response()
    print('msg:%s' % msg)
# 建立发布者
# -*- coding:utf-8 -*-

from channel import RedisBase

obj = RedisBase()
msg = 'hello world'
obj.publish_msg(msg)

转载于:https://www.cnblogs.com/bbszc520/p/8900097.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值