124 lines
3.7 KiB
Python
124 lines
3.7 KiB
Python
import pymysql
|
||
import modules.read_config
|
||
import json
|
||
import logging
|
||
|
||
|
||
# 创建表
|
||
create_table_sql = """CREATE TABLE devicesinfo (id INT AUTO_INCREMENT PRIMARY KEY,device VARCHAR(100),time JSON);"""
|
||
# 为device创建索引
|
||
create_idx_device = """CREATE INDEX idx_device ON devicesinfo (device);"""
|
||
|
||
|
||
|
||
# 连接到 MySQL 数据库
|
||
def connect_to_mysql():
|
||
db_host = modules.read_config.read_config_ini()['host']
|
||
db_user = modules.read_config.read_config_ini()['username']
|
||
db_passwd = modules.read_config.read_config_ini()['password']
|
||
db_dbname = modules.read_config.read_config_ini()['database_name']
|
||
try:
|
||
conn = pymysql.connect(
|
||
host=db_host, # 数据库主机名或IP地址
|
||
user=db_user, # 数据库用户名
|
||
password=db_passwd, # 数据库密码
|
||
database=db_dbname # 数据库名
|
||
)
|
||
print("成功连接到 MySQL 数据库!")
|
||
return conn
|
||
except pymysql.Error as e:
|
||
print(f"连接到数据库时出现错误:{e}")
|
||
return None
|
||
|
||
|
||
# 创建表
|
||
def create_table(sql):
|
||
connection = connect_to_mysql()
|
||
try:
|
||
with connection.cursor() as cursor:
|
||
cursor.execute(sql)
|
||
|
||
# 提交事务
|
||
connection.commit()
|
||
print("成功创建表!")
|
||
except pymysql.Error as e:
|
||
print(f"创建表时出现错误:{e}")
|
||
connection.close()
|
||
|
||
|
||
def query_table(device):
|
||
connection = connect_to_mysql()
|
||
try:
|
||
with connection.cursor() as cursor:
|
||
# 使用参数化查询来查询设备信息
|
||
sql = "SELECT * FROM devicesinfo WHERE device = %s"
|
||
cursor.execute(sql, (device,))
|
||
result = cursor.fetchone()
|
||
# print(f"result:{result},type:{type(result)}")
|
||
if result:
|
||
device_info = {
|
||
'id': result[0],
|
||
'device': result[1],
|
||
'time': result[2]
|
||
}
|
||
print(f"查询结果:{device_info}\n类型:{type(device_info)}")
|
||
return device_info
|
||
else:
|
||
print("设备不存在。")
|
||
return False
|
||
|
||
except pymysql.Error as e:
|
||
print(f"查询设备信息时出现错误:{e}")
|
||
logging.ERROR(e)
|
||
connection.close()
|
||
|
||
|
||
def add_device(device,time):
|
||
connection = connect_to_mysql()
|
||
try:
|
||
with connection.cursor() as cursor:
|
||
# 使用参数化查询来插入数据
|
||
sql = "INSERT INTO devicesinfo (device, time) VALUES (%s, %s)"
|
||
cursor.execute(sql, (device, time))
|
||
|
||
# 提交事务
|
||
connection.commit()
|
||
print("成功插入数据!")
|
||
except pymysql.Error as e:
|
||
print(f"插入数据时出现错误:{e}")
|
||
connection.close()
|
||
|
||
|
||
def update_time(device, new_time):
|
||
connection = connect_to_mysql()
|
||
try:
|
||
with connection.cursor() as cursor:
|
||
|
||
# 使用 JSON_SET 函数更新 'time' 字段
|
||
sql = "UPDATE devicesinfo SET time = %s WHERE device = %s"
|
||
|
||
cursor.execute(sql, (new_time, device))
|
||
|
||
# 提交事务
|
||
connection.commit()
|
||
print("成功更新设备的时间,设备ID为:", device)
|
||
except pymysql.Error as e:
|
||
print(f"更新设备ID为 {device} 的时间时出现错误:{e}")
|
||
connection.close()
|
||
|
||
|
||
|
||
def main(device,new_time):
|
||
result = query_table(device)
|
||
if result:
|
||
print(f"time:{result['time']}\ntime类型:{type(result['time'])}")
|
||
if new_time != result['time']:
|
||
update_time(device,new_time)
|
||
return
|
||
else:
|
||
print(f"time字段等于设备最新数据,不更新数据库")
|
||
return
|
||
else:
|
||
add_device(device,new_time)
|
||
return
|