第 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)
数据库中查看: