python批量插入数据到mysql的三种方法(非pandas)

Ft 2020-07-14 AM 120℃ 0条

自动化单条insert

# -*- coding:utf-8 -*-
import time
from pymysql import *

# 装饰器,计算插入50000条数据需要的时间
def timer(func):
    def decor(*args):
        start_time = time.time()
        func(*args)
        end_time = time.time()
        d_time = end_time - start_time
        print("the running time is : ", d_time)

    return decor

@timer
def add_test_users():

    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cs = conn.cursor()  # 获取游标
    for num in range(0, 58000):
        try:
            sql = "insert into '表名'(字段名) values(值)"
            cs.execute(sql)

        except Exception as e:
            return
            
    conn.commit()  # 提交
    cs.close()
    conn.close()
    print('OK')

add_test_users()

拼接sql语句,只执行一次insert

# -*- coding:utf-8 -*-
import time
from pymysql import *

# 装饰器,计算插入50000条数据需要的时间
def timer(func):
    def decor(*args):
        start_time = time.time()
        func(*args)
        end_time = time.time()
        d_time = end_time - start_time
        print("the running time is : ", d_time)

    return decor

@timer
def add_test_users():
    
    usersvalues = []
    for num in range(1, 50000):
        usersvalues.append(('需要插入的字段对应的value'))  # 注意要用两个括号扩起来

    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cs = conn.cursor()  # 获取光标
    # 注意这里使用的是executemany而不是execute,下边有对executemany的详细说明
    cs.executemany('insert into '表名'(字段名) values(%s,%s,%s,%s)', usersvalues)

    conn.commit()
    cs.close()
    conn.close()
    print('OK')

add_test_users()

针对executemany execute(sql) : 接受一条语句从而执行
executemany(templet,args):能同时执行多条语句,执行同样多的语句可比execute()快很多,强烈建议执行多条语句时使用executemany
templet : sql模板字符串,  例如 ‘insert into table(id,name,age)
values(%s,%s,%s)’ args: 模板字符串中的参数,是一个list,在list中的每一个元素必须是元组!!!  例如:
[(1,‘mike’),(2,‘jordan’),(3,‘james’),(4,‘rose’)]

使用load data infile 加载到mysql

# -*- coding:utf-8 -*-
import time
from pymysql import *

# 装饰器 记录时间
def timer(func):
    def decor(*args):
        start_time = time.time()
        func(*args)
        end_time = time.time()
        d_time = end_time - start_time
        print("the running time is : ", d_time)

    return decor

@timer
def exc_data():
    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cs = conn.cursor()
    # 注意表明后边添加的字段名要与自己写的文本文件相对应,如果文本文件有主键,而且与其他字段也是一一对应,这里只
    需要写上一个数据表即可,但是如果文本文件一般情况下是没有定义主键的,因此我们需要在这里添加上几个除主键外其他
    的字段名
    sql = "load data infile '/var/lib/mysql-files/data.txt' into table '表名'(字段名);" # 针对定
    义好的数据表以及文本,就是应该添加上这几个字段 (name,age,gender,classify_id)
    cs.execute(sql)
    conn.commit()
    cs.close()
    conn.close()
    print('OK')

exc_data()

原文链接:https://blog.csdn.net/weixin_42703149/java/article/details/85120029

标签: python

非特殊说明,本博所有文章均为博主原创。

评论啦~