Python3 Socket + Mysql的使用 - 基础案例

Python3 Socket + Mysql的使用 - 基础案例


前言

小白个人研究成果,仅供参考

一、下载安装Mysqldb

python3 直接cmd运行

pip3 install Mysqlclien

二、代码部分

想要的结果:客户端调用服务端,获取到数据库数据

1.Socket服务端

准备工作做好后,我们准备服务端 server.py

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import socket
import MySQLdb

# 服务端

if __name__ == '__main__':
    # 创建socket对象
    sock = socket.socket()
    # 获取本地主机名
    hostName = socket.gethostname()
    # 设置端口号
    prot = 8081
    # 绑定主机和端口
    sock.bind((hostName, prot))
    # 设置等待时间
    sock.listen(10)

    # 连接数据库(ip, 用户名, 密码, 数据库名, 编码)
    conn = MySQLdb.connect('127.0.0.1', 'root', '123456', 'Demo', charset='utf8')
    # 获取操作游标
    cursor = conn.cursor()
    cursor.execute('select * from class')
    data = cursor.fetchall()

    while True:
        # 获取客户端请求
        clientSock, address = sock.accept()
        print('连接地址:%s' % address[0])
        # 获取客户端消息
        clientMsg = clientSock.recv(1024).decode()
        if '钱' in clientMsg:
            msg = '当前网络差,连接失败~'
        else:
            # 以[{},{}]格式返回给客户端
            msg = data
        # 向客户端发送消息
        clientSock.send(str(msg).encode())
        # 关闭连接
        clientSock.close()

    conn.close()

2.Socket客户端

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import socket

# 客户端

if __name__ == '__main__':
    # 创建socket连接对象
    sock = socket.socket()
    # 获取服务端主机名(我这里是本地)
    serverHostName = socket.gethostname()
    # 连接服务端
    sock.connect((serverHostName, 8081))

    msg = '我要*钱。'
    msg = '我要数据'
    # 向服务端发送消息
    sock.send(bytes(msg, encoding='utf8'))

    # 接受服务端消息
    serverMsg = sock.recv(1024).decode()
    # 返回的数据是((),())格式的,所以我这边用比较蠢笨的方法去获取单个数据
    # 去掉首尾的(())
    msg = serverMsg[2:len(serverMsg)-2]
    # 根据), (分割数据
    msg = msg.split('), (')
    # 提取出单条数据
    for index in range(len(msg)):
        data = msg[index].split(',')
        print('班级名称:%s,班级编号:%s,班主任:%s' % (data[1], data[2], data[3]))

    # 关闭连接
    sock.close()
    pass


数据库基本操作示例

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import MySQLdb  # python3安装命令:pip3 install Mysqlclien

if __name__ == '__main__':
    # 连接数据库(ip, 用户名, 密码, 数据库名, 编码)
    conn = MySQLdb.connect('127.0.0.1', 'root', '123456', 'demo', charset='utf8')

    # 获取操作游标
    cursor = conn.cursor()

    try:
        # 执行建表操作 - 先判断删除已存在的表再执行新建操作
        cursor.execute('DROP TABLE IF EXISTS class')

        createSql = """CREATE TABLE `class` (
                    `id` int(11) NOT NULL AUTO_INCREMENT,
                    `name` varchar(255) DEFAULT NULL,
                    `code` varchar(255) DEFAULT NULL,
                    `teacher` varchar(255) DEFAULT NULL,
                    PRIMARY KEY (`id`)
                    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4"""

        cursor.execute(createSql)

        # 插入数据
        cursor.execute("INSERT INTO `demo`.`class` (`name`, `code`, `teacher`) VALUES ('一年级一班', '20210901', '张秀梅')")
        cursor.execute("INSERT INTO `demo`.`class` (`name`, `code`, `teacher`) VALUES ('一年级(2)班', '20210903', '姚婷')")

        # 获取新增数据的ID (需在commit前调用)
        firstId = conn.insert_id()

        insertSql = "INSERT INTO `demo`.`class` (`name`, `code`, `teacher`) VALUES ('%s', '%s', '%s')" % ('一年级(3)班', '20210902', '胡启秀')
        cursor.execute(insertSql)

        # 获取最后一条新增数据的ID
        lastId = cursor.lastrowid

        # 提交数据
        conn.commit()

        # 修改数据
        cursor.execute("UPDATE `demo`.`class` SET `name` = '%s' WHERE (`id` = '%s')" % ('一年级(1)班', firstId))

        conn.commit()

        # 删除数据
        cursor.execute('DELETE FROM class WHERE id = %d' % lastId)

        print("删除操作中受影响的行数:", cursor.rowcount)

        conn.commit()

        # 查询数据
        cursor.execute('SELECT * FROM class')
        datas = cursor.fetchall()
        for data in datas:
            print("ID:%d" % (data[0]))
            for index in range(len(data)):
                print(data[index])

    except Exception as e:
        # 回滚事物
        conn.rollback()
        print('操作异常:', e)

    finally:
        # 关闭数据库
        conn.close()

    pass

总结

又是小白努力向上的一天!有不足之处欢迎指出。
本文参考自:https://www.runoob.com/python/python-socket.html

上一篇:Python ssh连接数据库


下一篇:【Oracle】Oracle Cursor(游标)