Python练习册,每天一个小程序(三)

第 0002 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中

解答:本题主要用到了Python中的pymysql库,需要创建一个数据库表,再将200个激活码插入到数据库中

(1)先编写一个Mysql类,实现数据库的连接,表的创建以及数据的插入

(2)调用类中的方法,结合练习册(二)中生成的激活码,将数据插入数据库

#encoding:utf-8

import random
import string
import pymysql
import datetime

class Mysql(object):

    def __init__(self):
        self.db pymysql.connect(host="localhost",user="root",password="123456",database="training")
        self.cur = self.db.cursor()

    def create_table(self):
        sql = '''
            create table if not exists activateCode(
                `id` int(11) primary key AUTO_INCREMENT,
                `code` varchar(80) not null,
                `ExpirationDate` varchar(80) not null
            )ENGINE=InnoDB default charset=utf8;
        '''
        self.cur.execute(sql)

    def insertDatas(self,table,values):
        sql = 'describe %s'%table
        self.cur.execute(sql)
        stus = self.cur.fetchall()
        columns = []
        val = []
        for i in range(1,len(stus)):
            columns.append(stus[i][0])
            val.append('%s')
        columns = ','.join(columns)
        val = ",".join(val)
        sql = "insert into %s(%s) values(%s)"%(table,columns,val)
        print(sql)
        self.cur.executemany(sql,values)
        self.db.commit()

def create_code():
    s = string.ascii_letters + string.digits
    code_list = []
    for i in range(0, 200):
        code = ""
        for j in range(0, 16):
            if j % 4 == 0 and j:
                code += "-"
            code += s[random.randint(0, len(s) - 1)]
        code_list.append(code)
    print(code_list)
    return code_list

def create_data(code_list):
    values=[]
    for code in code_list:
        values.append((code,get_dateline_time()))
    return values

# 假设有效期为两天
def get_dateline_time():
    return (datetime.datetime.now()+datetime.timedelta(days=2)).strftime("%Y%m%d%H%M%S")

if __name__ == '__main__':
    values = create_data(create_code())
    mysql = Mysql()
    mysql.create_table()
    mysql.insertDatas("activateCode",values)

数据库中查看:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值