您的位置:首页 > 编程语言 > Python开发

Python 查询原生sql,model转json

2017-02-09 11:11 435 查看
1 首先我们看一下python 序列化对象===========================================================================================================================

class Test:
def __int__(self):
self.a=2
self.b=3

a = Test();
a.a=2;
a.b=3;
a_dist = a.__dict__;
print json.dumps(a_dist);


是不是很简单直接转为dict 就ok;

2 那我们在django 数据库查询的时候继承了models===================================================================================================================

userinfo= User.objects.get(id=1);
print userinfo.__dict__;


输出结果为

{'address': u'nanjin', '_state': <django.db.models.base.ModelState object at 0x0000000003D59E48>, 'id': 1L, 'name': u'seat'}


3 在往json 转换的时候_state 的时候, model 是无法系列化的,解决方案======================================================================================================

print  model_to_dict(userinfo)
print json.dumps(model_to_dict(userinfo))


4结果就去掉了_STATE===================================================================================================================================

{'address': u'nanjin', 'id': 1L, 'name': u'seat'}
{"address": "nanjin", "id": 1, "name": "seat"}


5 如果是对象列表呢?===================================================================================================================================

users = DemoTest.models.User.objects.all()
type(users)
usersjson = json.dumps(list(users), default=lambda O: model_to_dict(O))


很简单吧,最近也是刚开始接触python

6 Python 解决原生sql的问题,并且处理orm,在sql 查询业务需要中,多张业务表 并没有显示的指明表之间的直接的关联关系,也就是说没有外键关联之类的,如果自己去构建vo ,这会浪费很多的时间,python 提供了api 去帮助我们实现这样的事情

==============================================================================================================================================

list_=[]
conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='', db='seantest')
cur = conn.cursor()
cur.execute("select a.*,b.user_teacher from USER a , userdetail b WHERE  a.id = b.userid")
desc = cur.description
print desc
if desc == None:
return []
columns = [col[0] for col in desc]
print columns
for row in cur.fetchall():
list_.append(dict(zip(columns,row)))
return list_


这里主要用了zip 函数来压缩2个元组,主要用了cur.descriptiop 这个api ,结果为

=================================================================================================================================================

[{'user_teacher': 'zhang', 'address': 'nanjin', 'id': 1L, 'name': 'zhoutao'}, {'user_teacher': 'zhou', 'address': 'hhaha', 'id': 3L, 'name': 'rerere'}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: