使用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的主要内容,如果未能解决你的问题,请参考以下文章
已解决 在 MySQL/Python 中使用转义字符创建插入查询