有段时间没写博客了,继续写练习题

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


分析问题:

由于是要把数据保存到mysql中,这里就需要用到MySQLdb模块,并且先生成再存入,

注意:

1 这里操作MySQL的时候,先写入一条,获得id,然后再更新该条记录

2  创建的验证码的格式为---'16进制的sql_id' + 'L' + 随机码

上代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import datetime
import random
import string
def opt_mysql(num):
    conn = MySQLdb.connect(user='root',passwd='ssp123',port=3306,charset="utf8",db='python')
    cur = conn.cursor()
    drop_table = '''DROP TABLE IF EXISTS lol_code'''
    cur.execute(drop_table)
    create_table = '''
        CREATE TABLE lol_code(
        id   INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
        codes VARCHAR(64) NOT  NULL ,
        create_time VARCHAR(64) NOT  NULL );
    '''
    cur.execute(create_table)
    for i in range(num):
        create_time = datetime.datetime.now()
        insert_table = '''INSERT INTO lol_code(codes,create_time) VALUES('TestCode','%s')'''%create_time
        cur.execute(insert_table)
        id = conn.insert_id() #conn.insert_id()一定要在conn.commit()之前,否则会返回0
        code = create_code(id)
        update_table ='''UPDATE lol_code SET codes = '%s' WHERE id = %s'''%(code,id)
        cur.execute(update_table)
    conn.commit()
    cur.close()
    conn.close()
def create_code(id,length=15):
    code = hex(int(id))+'L'
    length_rdm = length - len(code)
    random_num = ''.join(random.sample(string.letters+string.digits,length_rdm))
    return code+random_num
if __name__ == '__main__':
    opt_mysql(300)


备注:

这个代码的思路是借鉴的别人的,写的不错。

http://linsir.org/post/Creat-the-unique-activation-code-with-python