本题的链接来自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]

详细内容看此 https://stackoverflow.com/questions/22863360/im-receiving-the-error-except-mysqldb-error-e-syntax-error-invalid-syntax


还有一个错误是下列代码,运行出来异常

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()