全部博文(2065)
分类: 系统运维
2010-06-26 12:48:11
数据以JSON组织存储
时间:
传统的数据表设计的时候我们是把多个字段分开进行保存数据。我想能否把多个字段进行一次合并处理。放在一个字段里面如
Oldtable : id name age sex school
Newtable:id json
测试:表结构如下
CREATE TABLE `t` (
`id` int(11) NOT NULL auto_increment,
`json` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
测试语言:Python
import MySQLdb
import pickle
conn = MySQLdb.connect("localhost","root","123","test",port=3306,connect_timeout=10,compress=True,charset='utf8',use_unicode=True)
cursor=conn.cursor()
content = [{"name":"PRIVMSG","age":12,"sex":"boy","school":"middle"},
{"name":"hkebao","age":13,"sex":"girl","school":"s"},
{"name":"PRI","age":12,"sex":"boy","school":"middle"}
]
byt2=pickle.dumps(content) //序列化处理得到一个经过序列化之后的字符串数据!
cursor.execute("insert into t(json) values(%s)",(byt2))
conn.commit()
说明:把字符串作一次序列化之后才能插入到数据库或保存到文件中去的/
现在我要读取出来:
cursor.execute("select
json from t where id=1")
row = cursor.fetchone() #返回一条记录
json = row[0] #这个是经过序列化之后的字符串值的!
s=pickle.loads(str(json)) #反序列化(将其作一次反序列化处理!)
print s[0]['age'] #打印出来
s[0]['age'] = 144333 #提取出来之后做一次更新相当于做一次update处理了!
byt2=pickle.dumps(s)
cursor.execute("update t
set json = (%s) where id=2",(byt2))
conn.commit()
将一条记录删除掉的方法
byt2=pickle.dumps(s)
cursor.execute("update t
set json = (%s) where id=2",(byt2))
conn.commit()
其实操作完成是利用了序列的方法操作的。也是相当于是利用了JSON类型的数据特点进行操作的。
如字典类型的操作!
模拟了SIUD操作。将来的应用看一下能否将其这样进行处理吧!