项目中需要用到MySQL保存数据,开始接触数据库以为只能保存简单的字符和数字,随着学习的深入发现数据库能存储的数据类型还是比较丰富的,之前设计的数据库表有些复杂了。完全可以将Python中的变量(列表、字典等)甚至类作为一个元素直接保存到数据库中,这样可以简化很多操作。
比如在pytho中有一个字典类型的变量data。
data = {'para1':name1,'para2':[1,2,3]}
按照之前的想法数据库中只能存储简单的变量,实现起来会非常麻烦,比如可以像下面这种方式存储:
para1(varchar) | para2_1(int) | para2_2(int) | para_3(int) |
name1 | 1 | 2 | 3 |
后来发现数据库可以保存二进制的变量,这样就方便多了,用这种方法还可以保存类等中间结果,很方便的:
参考链接:https://www.runoob.com/mysql/mysql-data-types.html
使用MEDIUMBLOB基本就能满足我的需求,现在还有一个问题就是如何将python变量转换为二进制变量呢?这个之前正好用过,可以使用pickle库实现。
data = {'para1':name1,'para2':[1,2,3]}
dataBin = pickle.dumps(data)
这样就可以直接将dataBin写入数据库保存了,和常用的方法一样:
id | content(MEDIUBLOB) |
1 | dataBin |
command = '''INSERT INTO testblob2(content) values(%s)'''
conn = pymysql.connect(db=db_name,user=db_user,passwd=db_pass,host=db_ip,port=int(db_port),charset="utf8")
cursor = conn.cursor()
cursor.execute(command,dataBin)
conn.commit()
cursor.close()
conn.close()
实际上我们还可以将其转换为json字符串,保存到数据库的文本变量中,但这种方法仅适用于字典,列表等变量:
dataJson = json.dumps(data)