资讯专栏INFORMATION COLUMN

python 批量生成唯一优惠券码(供php调用)

objc94 / 1280人阅读

摘要:批量生成优惠券码并写入数据表说明这篇文章主要讲的是个人工作中遇到的解决问题的方法而非程序写的多优美。

python 批量生成优惠券码并写入数据表 说明:这篇文章主要讲的是个人工作中遇到的解决问题的方法,而非程序写的多优美。要完善的地方太多了,大家嘴下留情 why do this 为什么要这么做?优惠券码直接在用的时候用程序直接生成不就OK了吗? 好,那么问题来了,我们的系统需要一次性发送几十万张优惠券,怎么破。这里引来这个问题(php编写的web程序)
1.通过php函数来生成几十万个优惠券码,然后分批次比如每次1000插入到数据表中,主要考虑到这几十万的码会占用大量内存,而且php执行时间也会过长,虽然可以设置超时时间,但总归不是better的解决方案
2.现有各个系统中都存在自己优惠券码的生成规则,但是数据表却是同一张,有了这个优惠码池,各个系统就无需再自己生成优惠码,而是直接要用多少读取多少即可。 引申出优惠券码池表(保证code值唯一) 数据表结构
CREATE TABLE `prefix_coupon_pool` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT "自增ID",
  `code` varchar(32) NOT NULL COMMENT "优惠券码 唯一性约束",
  `is_assigned` tinyint(1) DEFAULT "0" COMMENT "0:未分配 1:已分配",
  `created_at` int(10) unsigned DEFAULT "0" COMMENT "生成时间",
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
python 代码说明 1.安装python-dotenv用来获取.env配置

git:https://github.com/theskumar/python-dotenv

2.建立.env文件
  DB_HOST=localhost
  DB_DATABASE=test
  DB_USERNAME=root
  DB_PASSWORD=root
  DB_PORT=3306
调用方法 ./pymakecoupon.py pp 6 10000

pp:优惠券前缀

6:优惠券长度

10000:生成个数

python源码如下
#!/usr/bin/env python
#coding:utf-8

import random
import string
from os.path import join, dirname
from dotenv import load_dotenv
from mysql import connector
import mysql
import os
import time
import sys


originCode = string.ascii_lowercase
failedRecord = 0

def getConnection():
    dotenv_path = join(dirname(__file__), ".env")
    print dotenv_path
    load_dotenv(dotenv_path)
    host = os.environ.get("DB_HOST")
    user = os.environ.get("DB_USERNAME")
    password = os.environ.get("DB_PASSWORD")
    database = os.environ.get("DB_DATABASE")
    port = os.environ.get("DB_PORT")
    try:
        connect = connector.connect(host=host, user=user, password=password, database=database, port=port)
        return connect
    except mysql.connector.Error as e:
        print e
        return False
    except Exception as e:
        return False

def makeCouponCode(prefix="p", length = 6):
    str = prefix
    if length == 0:
        pass
    for index in range(length):
        str += random.choice(originCode)
    return str

if __name__ == "__main__":
    args = sys.argv
    codeList = []
    if len(args) != 4:
        print "参数错误,调用方式为:./pymakecoupon.py p10 6 100"
        exit()
    try:
        prefix = args[1]
        length = int(args[2])
        count = int(args[3])
    except IndexError as e:
        print "参数错误"

    msg = "将生成前缀为:%s,优惠券长度为:%s,总共%s个优惠券码"
    msg = msg % (prefix, length, count)
    print msg
    inputPrompt = raw_input("y/n
")
    if inputPrompt == "y":
        pass
    else:
        print "bye"
        exit

    connect = getConnection()
    if connect == False:
        sys.exit(0)
    cursor = connect.cursor()
    codeString = ""
    now = int(time.time())
    for index in range(1,count+1):
        pass
        code = makeCouponCode(prefix,length)
        codeTemplate = "("%s",%s)"
        code = codeTemplate % (code,now)
        codeList.append(code)
        print code
        if index % 1000 == 0:
            codeString = ",".join(codeList)
            sql = "INSERT IGNORE INTO prefix_coupon_pool(code,created_at)VALUES %s"
            sql = sql % (codeString)
            cursor.execute(sql)
            connect.commit()
    connect.close



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37925.html

相关文章

  • python 批量生成唯一惠券(php调用)

    摘要:批量生成优惠券码并写入数据表说明这篇文章主要讲的是个人工作中遇到的解决问题的方法而非程序写的多优美。 python 批量生成优惠券码并写入数据表 说明:这篇文章主要讲的是个人工作中遇到的解决问题的方法,而非程序写的多优美。要完善的地方太多了,大家嘴下留情 why do this 为什么要这么做?优惠券码直接在用的时候用程序直接生成不就OK了吗? 好,那么问题来了,我们的系统需要一次性发...

    Jeff 评论0 收藏0
  • 浅析微信支付:商户平台代金券或立减优惠开通、指定用户代金券发放、查询等

    摘要:本文是浅析微信支付系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等。代金券微信支付代金券业务是基于微信支付,为了协助商户方便地实现营销优惠措施。 本文是【浅析微信支付】系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等。 浅析微信支付系列已...

    neroneroffy 评论0 收藏0
  • 浅析微信支付:统一下单接口

    摘要:本文是浅析微信支付系列文章的第五篇,主要讲解如何调用统一下单接口生成预支付单及调起支付页面。浅析微信支付系列已经更新四篇了哟,没有看过的朋友们可以看一下哦。 本文是【浅析微信支付】系列文章的第五篇,主要讲解如何调用统一下单接口生成预支付单及调起支付页面。 浅析微信支付系列已经更新四篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:微信公众号网页授权 浅析微信支付:开发前的准备 ...

    ytwman 评论0 收藏0
  • PHP图片处理之二维加文字

    摘要:分析将链接生成二维码不难,直接即可解决。打开图片将生成的二维码图片按照路径打开,获取相关信息。销毁图片销毁生成的图片资源和生成的图片文件。 需求 客户商品管理系统,每个商品需要生成一个二维码以便手机直接扫描查看商品信息,而对应的,二维码下方必须有一串唯一码,它们存在于一张图片上,以方便用户另存打印贴纸(不相干细节省略)。 分析 将链接生成二维码不难,直接qrcode即可解决。 剩下的对...

    justjavac 评论0 收藏0
  • 阿里云平台发送短信

    摘要:获取阿里云访问密钥为了使用短信发送,您必须申请阿里云的访问密钥。国际港澳台消息只能使用国际港澳台短信模版发送短信。 1.获取阿里云访问密钥 为了使用短信发送API-Python SDK,您必须申请阿里云的访问密钥。 阿里云访问秘钥是阿里云为用户使用 API(非控制台)来访问其云资源设计的安全口令。您可以用它来签名 API 请求内容以通过服务端的安全验证。 该访问秘钥成对(AccessK...

    CODING 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<