数据库库导入2w测试数据3种方法

方法1,SQL导入【这个方式是针对PG库的】

其中stk_out_rtn_id,bill_no是可变的,其他字段是不变的

INSERT INTO stk_out_rtn_his (stk_out_rtn_id,bill_no,stk_out_rtn_type,rtn_org_id,rtn_org_code,rtn_org_name,rtn_wh_id,rtn_wh_code,rtn_wh_name,dep_code,dep_name,sup_org_id,sup_org_code,sup_org_name,pur_cnt_id,pur_cnt_code,main_org_id,main_org_code,main_org_name,dis_cnt_id,source_biil_no,rel_rtn_in_tax_sum,rel_rtn_num,rel_rtn_term_num,pur_rtn_in_tax_sum,rtn_term_num,rtn_num,rtn_reason,remark,crt_date,crt_user_id,crt_user_code,crt_user_name,crt_org_id,crt_org_code,crt_org_name,upd_date,upd_user_id,upd_user_code,upd_user_name,upd_org_id,upd_org_code,upd_org_name,acc_date,acc_user_id,acc_user_code,acc_user_name,acc_org_id,acc_org_code,acc_org_name,acc_status,bill_status,com_rtn_order_reason,ref_bill_no,ref_bill_type,ref_bill_type_dsc,business_date,drc_rtn_order_reason,pur_user_id,pur_user_code,pur_user_name,biz_bill_type,is_rebate,is_specified_price,print_num,print_date,dis_rtn_in_total,rel_dis_rtn_in_total,red_status,source_type,audit_date,audit_user_id,audit_user_code,audit_user_name,audit_status,audit_opinion,rtn_org_contact,rtn_org_contact_tel,rtn_addr,udp1,mov_date,pur_rtn_tax_sum,rel_rtn_tax_sum,pur_cnt_name,dis_cnt_code,dis_cnt_name,pur_rtn_ex_tax_sum,rel_rtn_ex_tax_sum,rel_dis_rtn_ex_total,rel_dis_rtn_tax_total,dis_rtn_ex_total,ord_bill_no,ord_biz_type,pre_bill_no,pre_biz_type,"version")

SELECT s.id ,'BillNo' || s.id AS data,'0',10027777,'109901','金蝶门店',1446973253661757312,'01','卖场仓库',NULL,NULL,1444645888193464894,'LJN','江苏卤江南食品有限公司',1445681263074607751,'XSJMB0050',1445587793848829539,'FJZX003','无锡分拣中心仓库',NULL,NULL,0.00000000,4.0000,2,0.00000000,2.0000,4.0000,NULL,NULL,'2023-09-16 15:00:00.000',1,'admin','admin',10027777,'109901','金蝶门店',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','0',NULL,'THDD20230911000005','1',NULL,'2023-09-25',NULL,NULL,NULL,NULL,'30501',0,'0',0,NULL,0.00000000,0.00000000,NULL,'0',NULL,NULL,NULL,NULL,'0',NULL,NULL,NULL,NULL,'2023-09-15',NULL,0.00000000,0.00000000,'test001',NULL,NULL,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,NULL,NULL,NULL,NULL,0

FROM generate_series(1, 200000) AS s(id);

方法2:python代码【这个方式是针对PG库的,如果要是MySql库的话就导出mysql的库文件然后调用时改成mysql即可】

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@author: Liqx
@file: 2w条普通采购退货单数据.py
@desc:
"""
import psycopg2
from psycopg2 import OperationalError

# 数据库连接配置
config = {
    'host': 'xx.xx.xx.xx',      # 数据库服务器地址
    'user': 'xxxx',        # 数据库用户名
    'password': 'xxxx',    # 数据库密码
    'database': 'xxxx', # 数据库名称
}

# 连接到PostgreSQL数据库
try:
    conn = psycopg2.connect(**config)
    cursor = conn.cursor()
    print("数据库连接成功")
except OperationalError as e:
    print(f"连接数据库失败: {e}")
    exit(1)

# 基础的SQL插入语句模板
insert_sql = """
INSERT INTO stk_out_rtn (stk_out_rtn_id, bill_no, stk_out_rtn_type, rtn_org_id, rtn_org_code, rtn_org_name, 
                        rtn_wh_id, rtn_wh_code, rtn_wh_name, sup_org_id, sup_org_code, sup_org_name, 
                        pur_cnt_id, pur_cnt_code, main_org_id, main_org_code, main_org_name, dis_cnt_id, 
                        source_biil_no, rel_rtn_in_tax_sum, rel_rtn_num, rel_rtn_term_num, pur_rtn_in_tax_sum, 
                        rtn_term_num, rtn_num, rtn_reason, remark, crt_date, crt_user_id, crt_user_code, 
                        crt_user_name, crt_org_id, crt_org_code, crt_org_name, upd_date, upd_user_id, 
                        upd_user_code, upd_user_name, upd_org_id, upd_org_code, upd_org_name, acc_date, 
                        acc_user_id, acc_user_code, acc_user_name, acc_org_id, acc_org_code, acc_org_name, 
                        acc_status, bill_status, com_rtn_order_reason, ref_bill_no, ref_bill_type, 
                        ref_bill_type_dsc, business_date, drc_rtn_order_reason, pur_user_id, pur_user_code, 
                        pur_user_name, biz_bill_type, is_rebate, is_specified_price, print_num, print_date, 
                        dis_rtn_in_total, rel_dis_rtn_in_total, red_status, pur_rtn_ex_tax_sum, 
                        rel_rtn_ex_tax_sum, audit_date, audit_user_id, audit_user_code, audit_user_name, 
                        audit_status, audit_opinion, rtn_org_contact, rtn_org_contact_tel, rtn_addr, udp1, 
                        dep_code, dep_name, source_type, ord_bill_no, ord_biz_type, pre_bill_no, pre_biz_type, 
                        version, pur_rtn_tax_sum, rel_rtn_tax_sum, pur_cnt_name, dis_cnt_code, dis_cnt_name, 
                        rel_dis_rtn_ex_total, rel_dis_rtn_tax_total, dis_rtn_ex_total) 
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s,%s,%s,%s);
"""

# 数据生成并批量插入
# 数据生成并批量插入
data_list = []
for i in range(20000):  # 生成2条数据,实际可以根据需要增加
    stk_out_rtn_id = 1368466666370893783 + i
    bill_no = f"THDJ202411190000{i:04}"
    data = (
        stk_out_rtn_id, bill_no, '0', 10005247, '30252002', 'AIP接口门店', 1349077876179207113, '01', '卖场仓库',
        1349176980402078173, '2020101601', 'AIP供应商', 1366635123738411317, '98760003', None, None, None, None,
        'THDD20210512000002', 25.20000000, 2.0000, 1, 25.20000000, 1.0000, 2.0000, None, None,
        '2021-05-12 09:43:42.000',
        1349104142051705801, '66666666', 'Eric', 10001902, '30252002', 'AIP接口门店', None, None, None, None, None,
        None, None, None, None, None, None, None, '2022-03-24 15:40:07.000', None, None, None, None, None, None, None,
        '2023-03-17', None, 1349104142051705801, '66666666', 'Eric', '30501', 1, None, 0, None, 0.00000000,
        0.00000000, None, 25.20000000, 25.20000000, None, None, None, None, '0', None, None, None, None, None,
        None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None
    )

    # 打印数据元组的长度以检查是否为78
    print(f"数据元组的长度: {len(data)}")

    data_list.append(data)

# 检查数据元组的长度
print(f"数据元组的总数量: {len(data_list)}")
for idx, item in enumerate(data_list):
    print(f"第 {idx + 1} 条数据元组长度: {len(item)}")

# 执行批量插入
try:
    cursor.executemany(insert_sql, data_list)
    conn.commit()
    print("数据插入成功")
except Exception as e:
    conn.rollback()
    print(f"数据插入失败: {e}")

# 关闭游标和连接
cursor.close()
conn.close()

方法3:存储过程调用方法

这个脚本里面handcashid字段是可变的,执行后会存储在数据库中,调用的时候直接在数据库执行CALL `InsertHandCashRecords`(1000);即可生成1000条数据、

也可以直接CREATE PROCEDURE `InsertHandCashRecords`(IN 1000 INT)

若是想其他字段也是随机生成可:

DECLARE orgcode VARCHAR(20) DEFAULT 'AAAA';  -- 定义一个新的变量来存储 orgcode
    DECLARE orgcode_suffix INT DEFAULT 1;  -- 用于递增orgcode的后缀

CREATE PROCEDURE `InsertHandCashRecords`(IN num_records INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE random_handcashid VARCHAR(20);
    DECLARE orgcode VARCHAR(20) DEFAULT 'AAAA';  -- 定义一个新的变量来存储 orgcode
    DECLARE orgcode_suffix INT DEFAULT 1;  -- 用于递增orgcode的后缀

    -- 循环插入数据
    WHILE i <= num_records DO
        -- 生成随机的 handcashid
        SET random_handcashid = CONCAT('AAAA01', DATE_FORMAT(NOW(), '%Y%m%d'), LPAD(FLOOR(RAND() * 10000000), 9, '0'));
        
        -- 插入数据
        INSERT INTO `tposhandcashrecord`(`handcashid`, `orgcode`, `posno`, `cshid`, `cshcode`, `cshname`, `handtime`, `orderno`, `bizdate`, `paycode`, `payname`, `total`, `incometype`, `handtype`, `exrefno`, `exrefdate`, `confirmbillno`, `comtag`, `combatchno`, `orgname`, `salechannel`)  
        VALUES (
            random_handcashid,
            CONCAT(orgcode, LPAD(orgcode_suffix, 3, '0')),  -- 生成顺序递增的 orgcode
            '01',
            UUID(),  -- 使用UUID()生成唯一的cshid
            '8888',
            CONCAT('王小明', i % 100),  -- 简单示例,通过i生成不同的名字
            '2024-11-01 18:47:55',
            CONCAT('AAAA0120241012', LPAD(i, 5, '0')),
            '2024-11-01',
            '0',
            '现金',
            ROUND(RAND() * 1000, 2),  -- 随机金额
            '0',
            '0',
            '',
            '',
            '',
            0,
            MD5(RANDOM_BYTES(16)),  -- 生成随机的combatchno
            '测试支付门店',
            '1'
        );

        -- 增加 orgcode_suffix 和 i
        SET orgcode_suffix = orgcode_suffix + 1;  -- orgcode后缀递增
        SET i = i + 1;
    END WHILE;
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值