使用python插入5000w数据到mysql

Posted 八戒vs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python插入5000w数据到mysql相关的知识,希望对你有一定的参考价值。

应用场景,数据库数据达到千万以后,做数据分析执行脚本开始变慢,所以用到clickhouse,先插入5000w数据测试

先安装pip支持mysql.connector,我安装的python3.11
pip3 install mysql-connector-python
再使用pip3 list查看是否安装成功

以下是mysql创建表语句

CREATE TABLE `test_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`recharge_amount` int(11) DEFAULT NULL,
`bonus` decimal(12,2) DEFAULT NULL,
`message` varchar(255) DEFAULT NULL,
`content` varchar(255) DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
`order_id` varchar(32) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=50000001 DEFAULT CHARSET=utf8;

python代码如下:

import mysql.connector
import random
import string
import datetime

# MySQL 连接信息
config = 
    \'user\': \'root\',
    \'password\': \'root\',
    \'host\': \'127.0.0.1\',
    \'database\': \'db1\',


# 生成模拟数据
def generate_data(batch_size=10000):
    for i in range(batch_size):
        # 生成模拟数据
        yield [random_string(32),random_string(16),random_string(64),getTimeStr(),random.randint(1000000, 9999999)]

#生成随机字符串
def random_string(length):
    letters = string.ascii_lowercase + string.digits
    return \'\'.join(random.choice(letters) for i in range(length))

def getTimeStr():
    # 获取当前日期和时间
    now = datetime.datetime.now()
    # 格式化为YmdHis格式
    formatted_time = now.strftime("%Y%m%d%H%M%S")
    # 将日期和时间转换为整数
    timestamp = int(now.timestamp())
    return formatted_time+str(timestamp)


def insertData():
    connection = mysql.connector.connect(**config)
    cursor = connection.cursor()
    # 数据总量
    total = 50000000

    # 每批次插入的数据量
    batch_size = 100000

    # 循环插入数据
    for i in range(0, total, batch_size):
        # 准备SQL语句,插入一批数据到表格中
        sql = "INSERT INTO test_table (message, content, remark, order_id,user_id,recharge_amount,bonus) VALUES "
        values = []
        for j in range(batch_size):
            values.append((random_string(32),random_string(16),random_string(64),getTimeStr(),random.randint(1000000, 9999999),random.randint(1, 10000),random.uniform(1.0, 100.0)))
        sql += ", ".join(["(%s, %s,%s,%s,%s,%s,%s)"] * len(values))
        val = [item for sublist in values for item in sublist]
        cursor.execute(sql, val)

        # 提交事务
        connection.commit()

        # 输出当前进度信息
        print(":.2f% 完成".format((i + batch_size) / total * 100))

    print(cursor.rowcount, "记录插入成功。")

if __name__ == \'__main__\':
    insertData()

python 将tupule值插入到mysql数据库。

我需要将tupule值安装到数据库中,但得到的是 "'字段列表'中的未知列'Mac'" 错误下面是我使用的代码

import  mysql.connector, csv, sys
conn  = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="root",
  database="mydjangoapp",
  port=3307,

)
cursor=conn.cursor()
t1=('Mac', 'Mohan')
sql="insert into books (title,isbn)  values(%s,%s)" %t1

cursor.execute(sql)
答案

不要使用"... % 插值,使用占位符。

t1 = ('Mac', 'Mohan',)
cursor.execute("INSERT INTO books (title, isbn) VALUES (%s, %s)", t1)

以上是关于使用python插入5000w数据到mysql的主要内容,如果未能解决你的问题,请参考以下文章

python 将tupule值插入到mysql数据库。

Python批量插入数据到MySQL

从 ADS1115 Python 向 MySQL 插入数据

已解决 在 MySQL/Python 中使用转义字符创建插入查询

如何使用 executemany 将 Python 中的字典列表插入 MySQL

如何用python批量插入数据到mysql数据库,用list