Python对象和类序列化到MySQL

"""
pickle序列化对象和类到数据库,需修改mysql数据库表结构,字段类型设为二进制,如blob类型,参考:
https://www.cnblogs.com/wangchunlan1299/p/7725062.html
| test  | CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `obj` mediumblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 |

<__main__.Person object at 0x0000000002A82A20> zhangsan 18
name:zhangsan,age:18
"""
import pickle
import pymysql


class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print('name:%s,age:%s' % (self.name, self.age))


"""
# 序列化对象
person = Person('zhangsan', 18)
ret = pickle.dumps(person)
# print(ret)

# obj = pickle.loads(ret)
# print(obj, obj.name, obj.age)
# obj.introduce()

conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', database='test', charset='utf8')
cursor = conn.cursor()
cursor.execute('insert into test(obj) values (%s);', [ret])
conn.commit()

cursor.execute('select * from test')
result = cursor.fetchall()
ret = result[0][1]

obj = pickle.loads(ret)
print(obj, obj.name, obj.age)
obj.introduce()
"""

# 序列化类
ret = pickle.dumps(Person)
print(ret)

conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', database='test', charset='utf8')
cursor = conn.cursor()
cursor.execute('insert into test(obj) values (%s);', [ret])
conn.commit()

cursor.execute('select * from test')
result = cursor.fetchall()
ret = result[0][1]

person_class = pickle.loads(ret)
person = person_class('zhangsan', 18)
print(person.name, person.age)
person.introduce()

猜你喜欢

转载自blog.csdn.net/zhu6201976/article/details/103883439