day40-Python连接Redis

一、Redis

1.Redis数据库

Redis内存数据库 -> KV数据库

set username hellokitty
get username

2.Redis持久化数据

Redis提供了两种持久化数据的方案:
RDB -> 周期性将内存数据写入dump文件
AOF -> Append Only File - 把执行过的命令保存起来

memcached
Redis - 缓存(热点数据)/ 队列


二、Python连接Redis

1.存储对象

"""
序列化 -> 把对象转换成字节或者字符序列 - 串行化 - serialize
反序列化 -> 将字节或者字符序列还原成对象 - 反串行化 -deserialize
json模块 -> 字符串形式(字符)的序列化和反序列化
dumps:将字典或者列表转成JSON字符串
loads:将JSON字符串转换成字典或者列表
pickle模块 -> 字节形式的序列化和反序列化

"""
import pickle
import redis


class Student(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age


def main():
    client = redis.StrictRedis(host='47.107.175.127',
                               password='123456')
    client.set('username', 'hellokitty', 120)
    print(client.ttl('username'))
    print(client.get('username'))
    print(client.expire('username', 300))
    print(client.ttl('username'))
    stu1 = Student('lyh', 20)
    """
    client.hset('stu', 'name', stu1.name)
    client.hset('stu', 'age', stu1.age)
    """

    client.set('stu', pickle.dumps(stu1))


if __name__ == '__main__':
    main()

2.获取对象

import pickle
import redis

from test1 import Student


def main():
    client = redis.StrictRedis(host='47.107.175.127',
                               password='123456')
    stu = pickle.loads(client.get('stu'))
    print(stu.name)
    print(stu.age)


if __name__ == '__main__':
    main()

3.存储二进制文件

import base64
import redis

from test1 import Student


def main():
    client = redis.StrictRedis(host='47.107.175.127',
                               password='123456')
    with open('touxiang.jpg', 'rb') as f:
        photo = base64.b64encode(f.read())
        client.set('photo', photo)


if __name__ == '__main__':
    main()

4.获取二进制文件

import base64
import redis

from test1 import Student


def main():
    client = redis.StrictRedis(host='47.107.175.127',
                               password='123456')

    with open('C:\\Users\\DELL\\Desktop\\ywl.jpg', 'wb') as f:
        photo = client.get('photo')
        f.write(base64.b64decode(photo))


if __name__ == '__main__':
    main()

三、第二阶段总结

1.网络应用的模式

网络应用的模式:C/S、B/S、P2P
client-server
browser-server
peer-to-peer

移动端(手机)/PC端(浏览器) + Web后端
HTML + CSS + JavaScript --> 前端(前端展示的数据是由后端的程序提供的)
后端 ===> 运算 + 存储 ===> 用Python程序为前端提供数据和服务
Django + Flask


2.前端知识

1.CSS - 选择器 / 优先级 / 盒子模型
2.JavaScript - ES / BOM(window) / DOM(document)

document
- createElement / appendChild / insertBefore
- removeChild
- innerHTML / textContent
- getElementById / getElementsByClassName / getElementsByTagName / querySelector / querySelectorAll

Ajax - jQuery
    - $.ajax({})
    - $.getJSON(url, function() {})

3.Linux
- 常用命令(文件操作/权限/工具/进程/网络)
- 安装软件(yum / 源代码构建安装)
- vim使用

4.数据库
- 关系型 - MySQL - SQL(DDL / DML / DCL)
- select - 投影/别名/筛选/模糊/排序/分组/聚合函数/分页/子查询/连接查询
- NoSQL - Redis - 缓存


四、通讯录

import pymysql


class Person(object):

    def __init__(self, name, tel, sex, addr, remark):
        self.name = name
        self.tel =tel
        self.sex = sex
        self.addr = addr
        self.remark = remark

    def __str__(self):
        return f'{self.name}\t{self.tel}\t{self.sex}\t\t{self.addr}\t{self.remark}\t'


def system_page():
    print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
    print('+                                                               +')
    print('                          欢迎来到通讯录                          ')
    print('+                           1. 添加                             +')
    print('+                           2. 查询                             +')
    print('+                           3. 删除                             +')
    print('+                           4. 修改                             +')
    print('+                           5. 退出                             +')
    print('+                                                               +')
    print('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')


def add_person(cursor):
    name = input('请输入姓名:')
    tel = input('请输入电话号码:')
    if len(tel) != 11:
        print('电话号码只能是11位,请重新输入!')
        tel = input('请输入电话号码:')
    sex = input('请输入性别:')
    if sex != '男' and sex != '女':
        print('性别只能是男或女,请重新输入!')
        sex = input('请输入性别:')
    addr = input('请输入联系地址:')
    remark = input('请输入备注:')
    result = cursor.execute('insert into addr_book(name, tel, sex, addr, remark) values(%s,%s,%s,%s,%s)', (name, tel, sex, addr, remark))
    if result == 1:
        print('添加成功!')
    else:
        print('添加失败!')


def query_person(cursor):
    name = input('请输入姓名:')
    cursor.execute('select name, tel, sex, addr, remark  from addr_book where name=%s ', (name,))
    persons = cursor.fetchall()
    print('姓名\t联系电话\t性别\t联系地址\t\t备注\t')
    for person in persons:
        person = Person(**person)
        print(person)


def del_person(cursor):
    name = input('请输入姓名:')
    result = cursor.execute('delete from addr_book where name=%s', (name,))
    if result == 1:
        print('删除成功!')
    else:
        print('删除失败!')


def update_person(cursor):
    name = input('请输入姓名:')
    tel = input('请输入新号码:')
    addr = input('请联系地址:')
    result = cursor.execute('update addr_book set tel=%s, addr=%s where name=%s', (tel, addr, name))
    if result == 1:
        print('修改成功!')
    else:
        print('修改失败!')


def main():
    con = pymysql.connect(host='localhost',
                          port=3306,
                          user='root',
                          passwd='123456',
                          database='abs',
                          charset='utf8',
                          autocommit=True,
                          cursorclass=pymysql.cursors.DictCursor
                          )
    try:
        with con.cursor() as cursor:
            system_page()
            operate = input('请选择操作:')
            if operate == '1':
                add_person(cursor)
            elif operate == '2':
                query_person(cursor)
            elif operate == '3':
                del_person(cursor)
            elif operate == '4':
                update_person(cursor)
            elif operate == '5':
                exit()
    except pymysql.MySQLError as e:
        print('操作失败!', e)
    finally:
        con.close()


if __name__ == '__main__':
    main()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容