小白个人研究成果,仅供参考
python3 直接cmd运行
pip3 install Mysqlclien
想要的结果:客户端调用服务端,获取到数据库数据
准备工作做好后,我们准备服务端 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()
#!/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