最近在写关于MySQL数据库的博客,总是感觉数据库查询如果没有足够多,足够真实的数据去练习,总是提不起兴趣,因为我使用的是Python,老话说的好:人生苦短,我用Python,所以琢磨了一下,为啥不可以使用Python快速的构建虚拟数据呢,来他10万条,然后练习基础查询那就不在话下了,闲话不多说,开整:
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的外面也需要加引号,前往不要大意
如果再加上循环,有点意思了
然后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()
复制代码
看着这一表的数据,大家不想做点啥,当然,我们也可以使用爬虫采集真实的数据,不过单纯的数据库练习上面的思路足够了,如果需要基于业务的分析,那么这样虚拟的数据是不可取的,我们之后再聊聊,基于爬虫让数据分析更加有说服力。