【python】创建tcp连接发送数据存入数据库

1.ubuntun上安装mysql及忘记密码重新设置

1.1 Ubtun安装Mysql
  • 更新软件包列
bash 复制代码
sudo apt update
  • 安装Mysql服务器
bash 复制代码
sudo apt install mysql-server
  • 启动数据库服务
bash 复制代码
sudo systemctl status mysql
  • 设置用户密码
bash 复制代码
sudo mysql_secure_installation

安装完毕后连接到MySQL服务器

bash 复制代码
mysql -u root -p

之后输入密码后回车,则显示登录成功,如下图所示

1.2 修改登录密码

因为好久没登录,忘记密码,在网上搜索了很多,记录下可用的

  • 输入以下命令进入
bash 复制代码
sudo cat /etc/mysql/debian.cnf 

显示如下:

  • 使用账号 debian-sys-maint 账号登录mysql密码为 debian.cnf 中password 值,再切换到mysql的database;

  • 修改root账号密码

这里需注意mysql的版本号,可切换到另一窗口进行版本号查询

bash 复制代码
mysql --version

因为我的版本是>8.0的,则采用以下方式:

bash 复制代码
update user set authentication_string='' where user='root' and Host ='localhost';

之后再刷新下

bash 复制代码
flush privileges;

之后就可以设置为自己的密码,如下所示:

bash 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

若是<8.0版本的,则采用以下方式:

bash 复制代码
 update mysql.user set authentication_string=PASSWORD('123456') where user='root' and Host ='localhost';

同样之后输入flush privileges;刷新下;

之后输入quit退出即可

然后重新登录,输入密码即可:

bash 复制代码
mysql -u root -p

2.通过tcp发送数据将其存入数据库

总体设计为:

创建一个服务端,用来监听和解析、存入数据,客户端用来模拟循环发送数据,假设时间间隔为2小时,以及发送的数据为json格式,则相关代码如下所示:

2.1 创建数据库
bash 复制代码
CREATE DATABASE test_tcp_data;

show databases;

#切换到这个数据库
use test_tcp_data;

#创建数据表,假设需要上传的数据为adc和温度,并记录相应插入表的时间
CREATE TABLE tcp_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    datetime DATETIME DEFAULT CURRENT_TIMESTAMP,
    temperature FLOAT,
    adc FLOAT
);

#查看数据表的格式
desc tcp_data;

如下图所示:

这里我们就创建好表;

2.2 将数据插入数据库

单独建一个python文件mysql_deal.py,方便后期进行其他数据库的操作,都将对数据库的操作放到这个文件中。

python 复制代码
import pymysql

my_config = { 
    'host':'localhost',
    'user':'root',
    'password':'123456',
    'database':'test_tcp_data'
}

def test_data(adc, temperature):
    conn = pymysql.connect(**my_config )
    cursor = conn.cursor()

    try:
        sql = "INSERT INTO tcp_data(adc, temperature) VALUES (%s, %s)"
        cursor.execute(sql, (adc, temperature))
        conn.commit()
        print("Insert success!")
    except Exception as e:
        print(f"Insert failed:{e}")
        conn.rollback()
    finally:
        cursor.close()
        conn.close()

    return 'OK'
2.3 通过python创建服务端server

代码如下所示:

python 复制代码
import socket
import json
from test import test_data

def process_data(data):
    """处理接收到的数据并存入数据库"""
    try:
        json_data = json.loads(data)
        adc = json_data.get('adc')
        temperature = json_data.get('temperature')
        if adc is not None and temperature is not None:
            #insert_data(adc, temperature)
            print(f"Inserted data: adc={adc}, temperature={temperature}")
            result = test_data(adc, temperature)
            print(result)
        else:
            print("Data does not contain 'adc' or 'temperature'")
    except json.JSONDecodeError:
        print("Failed to decode JSON data")

def start_server(host='0.0.0.0', port=5000):
    """启动服务器并处理客户端连接"""
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(5)
    print(f"Server listening on {host}:{port}")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"Connection from {addr}")
        try:
            data = client_socket.recv(1024).decode('utf-8')
            process_data(data)
        finally:
            client_socket.close()

if __name__ == "__main__":
    start_server()
2.4 创建client模拟循环发送数据
python 复制代码
import socket
import json
import time

# 服务器的 IP 地址和端口
SERVER_IP = '127.0.0.1'
SERVER_PORT = 5000

def send_data_to_server(data):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
        try:
            # 连接到服务器
            client_socket.connect((SERVER_IP, SERVER_PORT))

            # 发送数据
            client_socket.sendall(data.encode('utf-8'))

            # 接收服务器响应
            response = client_socket.recv(1024).decode('utf-8')
            print(f"Server response: {response}")

        except Exception as e:
            print(f"An error occurred: {e}")

def main():
    counter = 1 
    adc_counter = 0.1 
    while True:
        # 构造数据
        data = { 
            "adc": str(adc_counter),
            "temperature": str(counter)
        }

        # 将字典转换为 JSON 字符串
        json_data = json.dumps(data)

        # 发送数据到服务器并处理响应
        send_data_to_server(json_data)

        # 增加计数器
        counter += 1
        adc_counter += 0.1

        # 等待2小时
        time.sleep(2 * 60 * 30)

if __name__ == "__main__":
    main()

则分别通过打开窗口命令行运行

bash 复制代码
python server.c

python client.c

这个时候我们可以切到mysql的界面,查看数据库,则知道刚插入进去:

相关推荐
LucianaiB14 分钟前
如何做好一份优秀的技术文档:专业指南与最佳实践
android·java·数据库
Eiceblue30 分钟前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
weixin_5275504042 分钟前
初级程序员入门指南
javascript·python·算法
程序员的世界你不懂1 小时前
Appium+python自动化(十)- 元素定位
python·appium·自动化
CryptoPP2 小时前
使用WebSocket实时获取印度股票数据源(无调用次数限制)实战
后端·python·websocket·网络协议·区块链
树叶@2 小时前
Python数据分析7
开发语言·python
gadiaola2 小时前
【计算机网络】第3章:传输层—TCP 拥塞控制
网络·网络协议·tcp/ip·计算机网络
老胖闲聊3 小时前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
码界奇点3 小时前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
浠寒AI3 小时前
智能体模式篇(上)- 深入 ReAct:LangGraph构建能自主思考与行动的 AI
人工智能·python