首页 > 数据库 >Python3测试mysql插入数据代码(chatgpt生成)

Python3测试mysql插入数据代码(chatgpt生成)

时间:2024-08-23 10:39:47浏览次数:5  
标签:items 数据库 connection values mysql print table chatgpt Python3

 

 

实现的功能:先连接mysql数据库,然后读取某个目录所有以txt文件命名后缀的json内容文件,解析出对应的key和value,然后插入数据到mysql数据库,最后关闭数据库连接

 

import os
import json
import pymysql
import re

"""
尝试插入json文件到 MySQL 数据库。
dbInfo: MySQL数据库信息
table_name:  MySQL数据中表名
table_items_obj:  MySQL数据中表头各项名称
json_directory_path: 本地的json文件路径
"""
dbInfo = {
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': '887910',
    'db': 'testpython'
}

table_name = 'products'

table_items_obj = ('ProductKey', 'AppKey', 'AndroidKey', 'VersionKey', 'VersionValue', 'FileName', 'Filedate')
json_directory_path = os.getcwd()


def connect_to_database(host, port, user, password, database):
    """
    尝试连接到 MySQL 数据库并返回连接对象和状态。

    :param host: 数据库主机地址
    :param port: 数据库端口号
    :param user: 数据库用户名
    :param password: 数据库密码
    :param database: 要连接的数据库名
    :return: (connection) - 连接对象
    """
    connection = None
    status_message = "数据库尝试连接...\n"

    try:
        # 尝试连接到数据库
        connection = pymysql.connect(
            host=host,
            port=port,
            user=user,
            password=password,
            database=database
        )
        status_message = status_message+"数据库连接成功\n"

        # 检查连接状态
        if connection.open:
            status_message = status_message+"检查数据库状态:已连接\n"
        else:
            status_message = status_message+"检查数据库状态:未连接\n"

    except Error as e:
        # 捕获连接错误
        status_message = status_message+f"连接数据库错误: {e}"+'\n'
    print(status_message+'\n')
    return connection


def close_database_connection(connection):
    """
    关闭数据库连接。

    :param connection: 数据库连接对象
    """
    if connection and connection.open:
        connection.close()
        print("数据库连接已关闭")
    else:
        print("数据库连接已关闭或数据库对象无效")

def insert_one_data_to_database(connection,table_name,table_items,table_values):

    """
    插入一条数据到数据库

    :param connection: 数据库连接对象
    :param table_name: 数据库表名
    :param table_values:表头项名称
    :param table_values:表数据各项的值
    """

    if not(connection and connection.open):
        print("数据库连接已关闭或数据库对象无效")
        return None

    print('table_name:',table_name)
    print('table_items:', table_items)
    print('table_values:', table_values)

    """
    #table_items = ('productID', 'productName', 'price', 'nums', 'date')
    #sql_table_items='(productID, productName, price, nums, date)'
    """
    sql_table_items = f"({', '.join(table_items)})"

    """
    #table_values = ('00004', '桔子', 9.88, 10, '2024-08-18 11:03:02)
    #sql_table_values='(%s, %s, %s, %s, %s)'
    """
    # 生成占位符
    sql_table_values="("
    for index, value in enumerate(table_values):
        if index == len(table_values) - 1:
            sql_table_values += '%s)'
        else:
            sql_table_values += '%s,'

    """
    table_name=sales
    sql_table_items='(productID, productName, price, nums, date)'
    sql_insert_cmd=
        INSERT INTO sales  (productID, productName, price, nums, date) 
        VALUES (%s, %s, %s, %s, %s)
    """
    sql_insert_cmd = "INSERT INTO "+table_name+" "+sql_table_items+"\n"+"VALUES "+sql_table_values+"\n"

    print('sql insert cmd:', sql_insert_cmd)
    try:
        with connection.cursor() as cursor:
            # 执行插入操作
            cursor.execute(sql_insert_cmd, table_values)
            # 提交事务
            connection.commit()
            print("sql插入数据命令执行,数据插入成功")
    except Error as e:
        print(f"sql插入数据命令执行,插入数据错误: {e}")

def get_json_data(data, indent=0,infileName=None,connection=None):
    """
    递归遍历 JSON 数据并打印每个键值对。
    :param data: JSON 数据(字典或列表)。
    :param indent: 当前层级的缩进级别。
    """

    # 示例字符串
    filename = "current_version2024_01_02.txt"

    # 使用正则表达式提取时间信息
    new_date_string = ''
    match = re.search(r'(\d{4})_(\d{2})_(\d{2})', filename)
    if match:
        year, month, day = match.groups()
        # 重新组成时间字符串,例如 "2024-01-02"
        new_date_string = f"{year}-{month}-{day}"
        print(new_date_string)
    else:
        print("No date found")

    values = []
    for category, stores in data.items():
        for store, platforms in stores.items():
            for platform, details in platforms.items():
                for key, value in details.items():
                    values.append((category, store, platform, key, value,infileName,new_date_string))
    print(values)
    for value in values:
        insert_one_data_to_database(connection,table_name,table_items_obj, value)
    return values


def read_json_files(directory,connection):
    """
    读取目录下所有 JSON 文件并打印其内容
    :param directory: 目录路径
    """
    for filename in os.listdir(directory):
        if filename.endswith('.txt'):
            print(f"\n匹配.txt文件成功===========Reading file:============= {filename}")
            file_path = os.path.join(directory, filename)
            with open(file_path, 'r', encoding='utf-8') as file:
                try:
                    data = json.load(file)
                    print(f"\n===========Reading file:============= {filename}")
                    in_indent = 0
                    get_json_data(data, in_indent, filename, connection)
                except json.JSONDecodeError as e:
                    print(f"Error decoding JSON from file {filename}: {e}")
        else:
            print(f"\n非.txt文件,跳过处理===========Ignore file:============= {filename}")





if __name__ == "__main__":
    connect_obj=connect_to_database(dbInfo['host'],dbInfo['port'],dbInfo['user'],dbInfo['password'],dbInfo['db'])
    # items_obj = ('productID', 'productName', 'price', 'nums', 'date')
    # values_obj = ('000010', '桔子', 9.88, 10, '2024-08-18 11:03:02')
    # insert_one_data_to_database(connect_obj,'sales',items_obj,values_obj)
    # 指定你的目录路径

    print(f"\n处理从文件插入数据的目录:",json_directory_path)
    read_json_files(json_directory_path,connect_obj)
    # 调用函数读取和处理 JSON 文件
    # read_and_process_json(r'.\current_version2024_01_01.txt')


    close_database_connection(connect_obj)

 

测试的JSON文件:

{
  "移动云盘": {
    "华为应用市场": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "小米应用商店": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "OPPO软件商店": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "vivo应用商店": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "魅族应用商店": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "三星应用商店": {
      "Android": {
        "version": "V10.3.4"
      }
    },
    "联想乐商店": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "腾讯应用宝": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "百度手机助手": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "豌豆荚": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "360手机助手": {
      "Android": {
        "version": "V10.4.0"
      }
    },
    "官网": {
      "Windows": {
        "version": "V7.7.0"
      },
      "Mac": {
        "version": "V3.1.2"
      },
      "Android": {
        "version": "V10.4.0"
      },
      "iOS": {
        "version": "V10.4.0"
      },
      "TV": {
        "version": "V6.3.0"
      }
    },
    "App Store": {
      "iOS": {
        "version": "V10.4.0"
      }
    }
  },
 }

 

标签:items,数据库,connection,values,mysql,print,table,chatgpt,Python3
From: https://www.cnblogs.com/jest549/p/18375486

相关文章

  • 利用ibd2sql直接读取mysql8数据文件数据
    MySQL8.0之后,表结构和表数据统一放到了ibd文件中,该文件包含了表的结构和索引以及数据信息。MySQL支持利用ibd2sdi来进行解析ibd文件下载地址:https://github.com/ddcw/ibd2sql/archive/refs/tags/v1.5.tar.gz[[email protected]]#ibd2sdi/data/mysqldata/data/test01/t......
  • Kettle: create_sampledata_mysql
    USEsampledate;CREATETABLEsampledata.QUADRANT_ACTUALS(REGIONVARCHAR(50)NOTNULL,DEPARTMENTVARCHAR(50)NOTNULL,POSITIONTITLEVARCHAR(50)NOTNULL,ACTUALDECIMAL(18,4),BUDGETDECIMAL(18,4),VARIANCEDECIMAL(18,4));CREATETABLEsampledata.DEPARTME......
  • 【MySQL】语法 · 备忘录
    原创巴韭特锁螺丝一、连接MySQL二、数据库三、表四、表结构五、表数据六、表数据——连接查询七、键八、函数九、视图十、存储过程十一、备份还原十二、用户很多时候深入学习固然很重要,但是想要写下一篇给新手都能看得懂看的很香,并且老鸟可以查漏补缺的的练习......
  • Python-批量统计MySQL中表的数据量
    背景在数据中台中,有时为了核对数据,需要每天批量统计MySQL数据库中表的数据量,但是DMS中没有周期调度功能。MySQL创建表--统计的表清单CREATETABLE`dws_table_list`(`table_name`varchar(255)DEFAULTNULL,`flag`varchar(255)DEFAULTNULL);--每天的数据量CRE......
  • MySQL 亿级数据平滑迁移实战
    本文介绍了一次MySQL数据迁移的流程,通过方案选型、业务改造、双写迁移最终实现了亿级数据的迁移。一、背景预约业务是vivo游戏中心的重要业务之一。由于历史原因,预约业务数据表与其他业务数据表存储在同一个数据库中。当其他业务出现慢SQL等异常情况时,可能会直接影响......
  • MySQL存储引擎
    一、简介数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不多的数据库管理系统都支持多种不同的数据引擎......
  • 【面试】一文搞懂MySQL的分库分表!
            MySQL分库分表是一种数据库优化手段,通常用于应对数据量巨大、并发量高的场景。随着系统数据的增长,单个数据库可能难以承受高负载,进而影响性能和可扩展性。分库分表的目标是将数据分散到多个库或表中,从而减少单一库或表的压力,提高系统性能。目录一我们为什......
  • MySQL面试问题(二)
    MySQL面试问题(二)文章目录MySQL面试问题(二)为什么要使用索引索引是不是越多越好MySQL索引机制什么是聚簇索引没有主键innodb如何处理联合索引批量向MySQL中导入1000w数据如何优化分页时偏移量很大效率很差如何优化大数据量高并发访问数据库优化方法为什么要使用索引......
  • Towards Mitigating ChatGPT’s Negative Impact on Education: Optimizing Question
    文章目录题目摘要引言概述实验结果结论和未来工作题目减轻ChatGPT对教育的负面影响:通过布鲁姆分类法优化问题设计论文地址:https://ieeexplore.ieee.org/document/10223662摘要    生成文本AI工具在回答问题方面的流行引发了人们对其可能对学生学业成......
  • Can Autograding of Student-Generated Questions Quality by ChatGPT Match Human Ex
    文章目录题目摘要引言相关工作方法讨论与启示结论题目ChatGPT对学生生成问题质量的自动评分能否与人类专家媲美?论文地址:https://ieeexplore.ieee.org/document/10510637摘要    学生生成问题(SGQ)策略是一种有效的教学策略,可培养学生的高阶认知和批判......