【Python】生成随机字符串并存入MySQL数据库

Description

  • Yixiaohan/show-me-the-code 第0001题 && 第0002题
  • 0001 :作为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
  • 0002 :将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。

Notes

这个小项目中涉及随机字符串的形成,以及用python连接MySQL的内容。几个知识点:

  • random模块的使用

    • random.randint(range)随机返回range范围内的一个int
    • random.choice(list)从list当中随意返回一项
      其他random模块相关知识可以参看Python中的random模块
  • 用python连接MySQL
    为了用python连接MySQL,首先要下载安装MySQL Server,并安装python相关的模块。推荐安装MySQL Workbench,为MySQL提供了图形界面。相关教程可以参阅Python Programming Tutorial - 48: Install MySql Connector for Python

    不得不说一句,youtube真是好啊。这几天从python到matlab再到MySQL,都是靠油管上面的教程才得以快速入门。个人而言,这种方法比自己吭哧吭哧地看官方手册不知道快到哪里去,爽到飞起。

    在这里简单总结一下这个小项目中用到的相关知识:

    1. 首先要连接到数据库,使用mysql.connector模块的connect()函数,参数如下所示:
      conn = mysql.connector.connect(user = "root", password = "", host = "localhost", database = "Python")

      以上语句执行结果是连接到本地的Python数据库(自己之前建好的,当然也可以在此项目中现建一个)。

    2. 连接到数据库后,“创建”操作游标
      cursor = conn.cursor()

    3. 在python上需要通过操作游标来真正执行对数据库的操作,如CREATE TABLE, TRUNCATE TABLE, SELECT等。
      cursor.execute("USE Python")
      通过cursor的execute()函数真正执行MySQL操作。

    4. 执行execute()函数之后并不能立即看到执行结果,需要通过fetchAll()函数接收所有的返回行。
      lists = cursor.fetchall()

    5. 和MySQL相关的一点知识。这个项目中的数据库结构是Python数据库中有一个activation_code表,表中有ID和ACTIVATION_CODE两项。

      如果某个值被设为是AUTO_INCREMENT,比如这个项目中的ID,那么这个值被设为NULL时,会自动从1往后排。指定某个值后,如果不重复,那么会从这个指定值往后排。0似乎和NULL 有相同功效。详情参看MySQLJIAOCHENG .
      执行对所有项执行DELETE操作之后,如果再次插入,那么ID仍然会从上次的最大值往后续。只有在全表删除操作之后才会从1开始。
      cursor.execute("TRUNCATE TABLE activation_code") # 全表删除

  • python中带参数的字符串
    可以参考代码中的法1和法2。

My Code

# -*- coding:utf-8 -*-
"""
* 0001
 && 0002
* by VegB
    # 问题: 没有检查生成的ACTIVATION_CODE是否有重复
* 2017/1/25
"""

import random
import mysql.connector

def createRandomString(len):
    raw = ""
    range1 = range(58, 65) # between 0~9 and A~Z
    range2 = range(91, 97) # between A~Z and a~z

    i = 0
    while i < len:
        seed = random.randint(48, 122)
        if ((seed in range1) or (seed in range2)):
            continue;
        raw += chr(seed);
        i += 1
    # print(raw)
    return raw



# 连接到数据库
conn = mysql.connector.connect(user = "root", password = "", host = "localhost", database = "Python")
cursor = conn.cursor() # 用来获得python执行Mysql命令的方法,操作游标
# cursor.execute("USE Python") # 真正执行MySQL语句,之前连接的时候已经指定是Python这个database了,这里就不用再说了

cursor.execute("TRUNCATE TABLE activation_code") # 全表删除

for i in range(0, 10):
    rtn = createRandomString(10)

    # 法1:
    # cursor.execute("""INSERT INTO activation_code VALUE(%s, %s)""", (0, rtn)) # 插入变量的方法和scanf差不多

    # 法2:
    cmd = "INSERT INTO activation_code VALUE(ID = NULL, %(ACTIVATION_CODE)s)"
    cursor.execute(cmd, {'ACTIVATION_CODE': rtn})

    # 注意这个地方,因为activation_code中的ID设置的是AUTO_INCREMENT,所以会自动生成ID,这里就写上ID = NULL就行了

conn.commit()
cursor.execute("SELECT * from activation_code")
lists = cursor.fetchall() # fetchall()接收全部的返回结果行
for list in lists:
    print(list) 

conn.close()

Result

生成的10个激活码如下所示:

再来看看数据库中的情况:

  可以看到数据库中成功存入了这十个激活码~开心!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值