1.使用SQLAlchemy

from sqlalchemy import create_engine,Column,String,Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = '1'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = "mysql+mysqlconnector://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(100))
    email = Column(String(100))
    
    # 单个对象方法1
    def to_dict(self):
        model_dict = dict(self.__dict__)
        del model_dict['_sa_instance_state']
        return model_dict
    Base.to_dict = to_dict # 注意:这个跟使用flask_sqlalchemy的有区别
    
    # 单个对象方法2
    def single_to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
        
    # 多个对象
    def dobule_to_dict(self):
        result = {}
        for key in self.__mapper__.c.keys():
            if getattr(self, key) is not None:
                result[key] = str(getattr(self, key))
            else:
                result[key] = getattr(self, key)
        return result

# 配合多个对象使用的函数
def to_json(all_vendors):
    v = [ ven.dobule_to_dict() for ven in all_vendors ]
    return v

# 示例代码
1.单个对象:
users = session.query(User).first()
print(users.single_to_dict()) # {'id': 1, 'username': 'admin', 'email': 'admin@example.com'}
print(users.to_dict()) # {'username': 'admin', 'email': 'admin@example.com', 'id': 1}
print(type(users.single_to_dict())) # <class 'dict'>
print(type(users.to_dict())) # <class 'dict'>

2.多个对象
users = session.query(User).all()
data = to_json(users)
print(data) # [{'id': '1', 'username': 'admin', 'email': 'admin@example.com'}, {'id': '2', 'username': 'guest', 'email': 'guest@example.com'}]
print(type(data)) # <class 'list'>
print(data[0]) # {'id': '1', 'username': 'admin', 'email': 'admin@example.com'}
print(type(data[0])) # <class 'dict'>

2.使用Flask-SQLAlchemy

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] =  'sqlite:///test.db'
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'user'

id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    
    # 单个对象方法1
    def to_dict(self):
        model_dict = dict(self.__dict__)
        del model_dict['_sa_instance_state']
        return model_dict
    db.to_dict = to_dict # 注意:这个跟使用SQLAlchemy的有区别
    
    # 单个对象方法2
    def single_to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
        
    # 多个对象
    def dobule_to_dict(self):
        result = {}
        for key in self.__mapper__.c.keys():
            if getattr(self, key) is not None:
                result[key] = str(getattr(self, key))
            else:
                result[key] = getattr(self, key)
        return result

# 配合多个对象使用的函数
def to_json(all_vendors):
    v = [ ven.dobule_to_dict() for ven in all_vendors ]
    return v

# 示例代码
1.单个对象:
users = User.query.first()
print(users.single_to_dict()) # {'id': 1, 'username': 'admin', 'email': 'admin@example.com'}
print(users.to_dict()) # {'username': 'admin', 'email': 'admin@example.com', 'id': 1}
print(type(users.single_to_dict())) # <class 'dict'>
print(type(users.to_dict())) # <class 'dict'>

2.多个对象
users = User.query.all()
data = to_json(users)
print(data) # [{'id': '1', 'username': 'admin', 'email': 'admin@example.com'}, {'id': '2', 'username': 'guest', 'email': 'guest@example.com'}]
print(type(data)) # <class 'list'>
print(data[0]) # {'id': '1', 'username': 'admin', 'email': 'admin@example.com'}
print(type(data[0])) # <class 'dict'>

把SQLAlchemy查询对象转换成字典/json使用(汇总)的更多相关文章

  1. 把SQLAlchemy查询对象转换成字典/json使用(分开)

    注:针对的是查询出来的是单条对象 多个对象的话可以使用for循环遍历查询出来的对象列表,也可以使用下面的方法 1.config.py文件 #!/usr/bin/env python #-*- codi ...

  2. 把SQLAlchemy查询对象转换成字典

    1-假设查出来的为单个对象 1-1 在model.py中为模型对象添加字典转换函数: from exts import db class User(db.Model): __tablename__ = ...

  3. sqlachemy查询对象转化成字典/json使用

    https://www.cnblogs.com/sanduzxcvbnm/p/10220718.html

  4. django QuerySet对象转换成字典对象

    >>> from django.contrib.auth.models import User >>> from django.forms.models impor ...

  5. python class对象转换成json/字典

    # -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...

  6. SpringMVC分页查询无法直接将对象转换成json的解决办法(报org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type:错)

    在用ajax获得分页数据时,无法将获取的值赋值给input标签,在修改用户信息时不显示用户已经注册的信息,百度可知 springmvc处理分页数据返回的对象时,无法直接将对象转换成json,会报org ...

  7. json 字符串转换成对象,对象转换成json字符串

    json   字符串转换成对象,对象转换成json字符串 前端: 方法一: parseJSON方法:   [注意jquery版本问题] var str = '{"name":&qu ...

  8. 将Model对象转换成json文本或者json二进制文件

    将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTran ...

  9. 编写Python脚本把sqlAlchemy对象转换成dict的教程

    编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...

随机推荐

  1. kettle 递归循环

    var i = new Number(parent_job.getVariable(; parent_job.setVariable("i",i); true;

  2. Linux排序命令sort(转)

    Linux sort命令用于将文本文件内容加以排序.sort可针对文本文件的内容,以行为单位来排序. 语法 sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符&g ...

  3. 基于java注解实现自己的orm框架

    ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关系. 现在常见的 ...

  4. HDU 1238

    好吧,这题直接搜索就可以了,不过要按照长度最短的来搜,很容易想得到. 记得ACM比赛上有这道题,呃..不过,直接搜..呵呵了,真不敢想. #include <iostream> #incl ...

  5. nyoj-20-吝啬的国度(深搜)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 在一个吝啬的国度里有N个城市.这N个城市间仅仅有N-1条路把这个N个城市连接起来.如今,Tom在第S号城市 ...

  6. JS计算两时间的天数

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body>& ...

  7. WndProc函数参数列表

    protected override void WndProc(ref Message m) 实现了这一点. 重写WndProc函数,可以捕捉所有窗口发生的消息.这样,我们就可以"篡改&qu ...

  8. oc16--set,get

    // // Kline.h // day13 #import <Foundation/Foundation.h> @interface Kline : NSObject { int _ma ...

  9. 两道人数多,课程少,query多的题

    #每天进步一点点# 来两道很相似的题目~ (智商啊智商.....) hihoCoder #1236:Scores (简单的分桶法+bitset) 2015 Beijing Online的最后一题.题目 ...

  10. nginx 限制ip/限制访问路径

    一.多站点统一限IP vim nginx.conf allow 127.0.0.1; deny all; # 以上代码解释: # deny all; 限制所有的ip # allow ip; 除了 这个 ...