Python 练习册0002
本题的链接来自https://github.com/Yixiaohan/show-me-the-code
将 0001题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。
解析
我用的数据库是MySQL,刚开始数据库整了半天,各种毛病,后来看到廖雪峰的网站,就好了,因为MySQL对于python3支持不是很到位。
首先这题是要生成激活码这个在我的另外一篇博客里有,Python 练习册0001,然后就是进入数据库,操作数据库。这里主要说明一下我在执行数据库时所犯的错误,首先是这一段代码
except MySQLdb.Error,e:
print("MySQL Error %d: %s" %(e.args[0],e.args[1]))
上面这段代码是python2的格式
下面这段是python3的格式
except MySQLdb.Error as e:
print("MySQL Error %d: %s" %(e.args[0],e.args[1]))
下面这段代码在python2和python3都可用
except MySQLdb.Error:
e = sys.exc_info()[1]
还有一个错误是下列代码,运行出来异常
for code in codes:
cur.execute("insert into act_code values(%s)",code)
但是改成了下面这段代码就对了
cur.executemany("insert into act_code values(%s)",codes)
我不是很懂为什么,要是有懂得小伙伴,麻烦告诉我^-^,博客的左边有联系方式,QQ,微博,邮箱都行。
代码
#coding:utf-8
import MySQLdb
import uuid
def generate(): #生成激活码
li = []
for i in range(200): # 生成200个
while (True):
s = str(uuid.uuid4()).replace('-','')
if not s in li: # 判断生成的uuid是否存在于之前的序列中,如果存在重新生成
li.append(s)
break
return li
def insert_sql(): #将激活码放入数据库
try:
codes = generate()
conn = MySQLdb.connect(host = 'localhost',port = 3306,user = 'root',passwd = 'qd19970120',db = 'test') #链接数据库
cur = conn.cursor() #cursor用来执行命令的方法
cur.execute("create table act_code(code varchar(50))") #创建表act_code
cur.executemany("insert into act_code values(%s)",codes) #插入数据,executemany批量操作,execute单个操作
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error as e:
print("MySQL Error %d: %s" %(e.args[0],e.args[1]))
if __name__ == '__main__':
insert_sql()