python对MySQL数据表数据进行预处理
下面代码(超简单[随意])是针对具体的例子。练习数据随后会上传txt格式,可以下载使用。
数据形式如图:
基于上图格式的数据进行一下操作:
i)将car_id转换成以空格作为分隔符的形式,如将“470,657”转换成“470 657”;
ii)筛选出收藏个数大于等于3的user_id及car_id;
iii)将转换好格式的数据保存到MySQL数据库中的一个新建表中。
由于没有学习过SQL语句,以及python处理数据的便捷性,便用最基本的python语句进行读写mysql数据库和进行数据处理。
具体代码和注释如下:
# _*_ coding:utf_*_
'''
i)将mysql数据表的数据读入,将逗号分割的数据转换成空格分隔(也可以转换成其他分隔符)。
ii)筛选出用户收藏个数大于3的数据,单独保存
iii)将列表数据重新保存到mysql中新建的处理后数据表中
'''
import pymysql
#创建连接到数据库(host,user,passwd,db根据自己的数据库信息填写主机名、用户名、密码和数据库名。
connection = pymysql.connect(host='xxxxxxx',user='xxxx',passwd='xxxxxx',db='xxx',charset='utf8')
#使用cursor()方法获得操作游标
cursor = connection.cursor()
#写要执行的sql语句(将数据全部导入到python中,导入数据为元组格式tuple数据)
sql = 'select * from user_car_collection_1'
print('loading data from database...')
#执行sql语句
cursor.execute(sql)
print('finish loading')
#使用fetchone()方法获取数据
all = cursor.fetchall()
#print(all)
print(all[1][1])
print(len(all))
print(type(all))
#筛选满足条件的收藏个数大于3的数据并保存
print('selecting data...')
data_morethan3 = []
for i in range(len(all)):
if len(all[i][1].split(','))>=3:
data_morethan3.append(all[i])
#print(data_morethan3)
print('selecting is done')
print(len(data_morethan3))
#将个数大于3的数据用空格分隔符连接,并于user_id保存成字典
print('saving the data as dictionary')
user_collect_morethan3 = {}
for j in range(len(data_morethan3)):
collect = data_morethan3[j][1].split(',')[0]
for k in range(len(data_morethan3[j][1].split(','))-1):
collect += ' '+data_morethan3[j][1].split(',')[k+1]
user_collect_morethan3[data_morethan3[j][0]] = collect
#print(user_collect_morethan3)
def dic2sql(dic,aql_1):
sf=''
for key in dic:
tup = (key,dic[key])
sf += (str(tup) + ',')
sf = sf.rstrip(',')
sql2 = sql_1 % sf
return sql2
print('saving the data to database...')
sql_1 = 'insert into user_collect_split1 (user_id,car_id) values %s'#将字典数据插入到mysql数据库表中
ret = dic2sql(user_collect_morethan3,sql_1)
cursor.execute(ret)
print('Done')
connection.commit()
cursor.close()
connection.close()
程序运行过程中的提示信息如下:
处理后的结果如下:
参考博文:
[1]https://blog.csdn.net/lylfv/article/details/82287784