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

Solution: Save Coupons to MySQL Database, Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-03-05 16:51:15
# @Author : NSSimacer
# @Version : 1.0
import MySQLdb
import string
import random
def connect():
'''
创建数据库连接
'''
try:
conn = MySQLdb.connect(
host='127.0.0.1',
user='user', # 你的数据库用户名
passwd='passwd', # 你的数据库密码
db='db', # 你的数据库名
port=3306)
except MySQLdb.Error, e:
print 'MySQL Error %d: %s' % (e.args[0], e.args[1])
return conn
def save_coupon_to_db(coupon_list):
'''
把激活码/优惠券保存到数据库
'''
try:
conn = connect()
cursor = conn.cursor()
cursor.execute('drop database if exists py_db')
cursor.execute('create database py_db')
conn.select_db('py_db')
cursor.execute('drop table if exists t_coupon')
cursor.execute('create table t_coupon(\
id int(3) primary key,\
coupon varchar(8))')
values = []
for i in xrange(len(coupon_list)):
values.append((i + 1, coupon_list[i]))
cursor.executemany('insert into t_coupon values(%s, %s)', values)
print 'Finish!'
conn.commit()
cursor.close()
conn.close()
except MySQLdb.Error, e:
print 'MySQL Error %d: %s' % (e.args[0], e.args[1])
def load_coupon():
'''
从数据库中载入激活码/优惠券
'''
try:
conn = connect()
cursor = conn.cursor()
print 'Loading data …'
count = cursor.execute('select * from t_coupon')
result = cursor.fetchall()
for r in result:
print r[1]
print 'There are %s rows.' % count
conn.commit()
cursor.close()
conn.close()
except MySQLdb.Error, e:
print 'MySQL Error %d: %s' % (e.args[0], e.args[1])
def generate_coupon(coupon_num, coupon_length):
'''
产生激活码/优惠券
'''
coupon_list = []
coupon_character_list = list(string.uppercase + string.digits)
for i in xrange(coupon_num):
coupon_str = ''
for j in xrange(coupon_length):
coupon_str += random.choice(coupon_character_list)
coupon_list.append(coupon_str)
return coupon_list
if __name__ == '__main__':
coupon_num = 200
coupon_length = 8
save_coupon_to_db(generate_coupon(coupon_num, coupon_length))
load_coupon()

主要目的是熟悉在 Python 中 MySQLdb 的基本操作 —— 连接数据库 MySQLdb.connect(self, args),获取游标 connect.cursor(self),获得游标之后,就可以执行 SQL 语句了 cursor.execute(self, query, args) 或者 cursor.executemany(self, query, args),从数据库获取数据记录 cursor.fetchall(self)/fetchone(self)/fetchmany(self, size=None)提交 connect.commit(self)

更多 API,请参考 MySQLdb User’s Guide.

题目来源:Python 练习册,每天一个小程序 THX!