【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的界面,查看数据库,则知道刚插入进去:

相关推荐
小彭律师2 分钟前
门禁人脸识别系统详细技术文档
笔记·python
鸿业远图科技1 小时前
分式注记种表达方式arcgis
python·arcgis
别让别人觉得你做不到2 小时前
Python(1) 做一个随机数的游戏
python
辛一一3 小时前
neo4j图数据库基本概念和向量使用
数据库·neo4j
小彭律师3 小时前
人脸识别门禁系统技术文档
python
巨龙之路3 小时前
什么是时序数据库?
数据库·时序数据库
蔡蓝4 小时前
binlog日志以及MySQL的数据同步
数据库·mysql
是店小二呀4 小时前
【金仓数据库征文】金融行业中的国产化数据库替代应用实践
数据库·金融·数据库平替用金仓·金仓数据库2025征文
炒空心菜菜5 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
张小九995 小时前
PyTorch的dataloader制作自定义数据集
人工智能·pytorch·python