使用Python快速提升你的数据库练习档次

最近在写关于MySQL数据库的博客,总是感觉数据库查询如果没有足够多,足够真实的数据去练习,总是提不起兴趣,因为我使用的是Python,老话说的好:人生苦短,我用Python,所以琢磨了一下,为啥不可以使用Python快速的构建虚拟数据呢,来他10万条,然后练习基础查询那就不在话下了,闲话不多说,开整:

思路

pymysql数据库API

Python提供了pymysql数据库连接模块,可以轻松的完成数据库的连接,和语句执行,比如:

connect = pymysql.connect(host="localhost", user = "root", password="", database = "practice") #链接数据库
cursor = connect.cursor() #定义游标,作为执行sql语句和接收返回结果的容器
cursor.execute("select * from test_table") #执行sql语句
print(cursor.fetchall()) #以元组嵌套的格式返回所有数据 ((1,"老边"),(2,"老王"))
cursor.close() #关闭游标
connect.commit() #提交操作,一般对数据库进行增删改很有必要
cursor.commit() #关闭连接,释放内存
复制代码

pymysql是python3的一个三方模块,需要pip安装

这里只是举一个简单的案例,如果有兴趣的小伙伴可以留言,可以专门来聊聊pymsql的前世今生。

字符串格式化

然后发现,sql语句在python当中居然是一个字符串格式的,于是,嘿嘿嘿

'insert into user(username,age,gender) values("%s","%s","%s")'%("小翠",12,"男")
复制代码

这里要注意,因为sql当中对字符串是加引号的,所以再字符串格式符%s的外面也需要加引号,前往不要大意

如果再加上循环,有点意思了

random随机模块

然后Python提供了random随机模块,所以使用random模拟数据,比如:

users = "赵钱孙李周吴郑王"
user = random.choice("老小")+random.choice(users) #random.choice从序列当中随机选出
复制代码

效果

基于上面的考虑,那么大家可以试一下下面的代码:

import random
import pymysql
​
sql_data_count = 1000000 #设定生成数据条数
​
connect = pymysql.connect(host="localhost", user = "root", password="", database = "practice")
​
cursor = connect.cursor()
​
cursor.execute("""create table browse_log(
    id int primary key auto_increment,
    store_name varchar(32),
    goods_name varchar(50),
    goods_type varchar(16),
    browse_time varchar(20),
    user_name varchar(20)
);
""") #这句只能执行一次,否则表格已经存在会报错,大家可以尝试优化
​
users = "赵钱孙李周吴郑王"
goods = [    ("棒棒糖", "零食"),    ("小锤锤", "五金"),    ("泡泡机", "玩具"),    ("甜甜圈", "食品"),    ("跳跳糖", "零食")]
stores = ["超市","小卖部","供销社"]
​
for i in range(sql_data_count):
    user = random.choice("老小")+random.choice(users)
    goods_name,goods_type = random.choice(goods)
    store = random.choice(stores)
    b_time = "%s-%s-%s %s:%s:%s"%(
        random.randint(2020, 2022),
        str(random.randint(1, 12)).zfill(2), #random.randint 随机生成范围内的数字,包含上限和下限
        str(random.randint(1, 28)).zfill(2),
        str(random.randint(0, 23)).zfill(2),
        str(random.randint(0, 59)).zfill(2),
        str(random.randint(0, 59)).zfill(2),
    )
​
    sql = 'insert into browse_log' \
          '(store_name,goods_name,goods_type,browse_time,user_name) ' \
          'values("%s","%s","%s","%s","%s");'%(store,goods_name,goods_type,b_time,user)
​
    cursor.execute(sql)
cursor.close() 
connect.commit()
connect.close()
复制代码

看着这一表的数据,大家不想做点啥,当然,我们也可以使用爬虫采集真实的数据,不过单纯的数据库练习上面的思路足够了,如果需要基于业务的分析,那么这样虚拟的数据是不可取的,我们之后再聊聊,基于爬虫让数据分析更加有说服力。

你可能感兴趣的:(python,数据库,mysql)