每次在这问问题,我都有点问的不好意思了;但是还是要问;
flask 框架,SQLAlchemy,用 mysql ;
那么问题来了,是不是视图的每一个查询都要建立一个对应的 SQLAlchemy 模型来处理?
比如,我要对 users 表进行添加、查询、更新;
# models.py
class users(db.Model):
# 定义表名
__tablename__ = 'users'
# id 是主键 db.Column 是字段名,db.INT 是数据类型
id = db.Column(db.INT, primary_key=True)
username= db.Column(db.String(255), unique=False)
password = db.Column(db.String(255), unique=False)
ip = db.Column(db.String(255), unique=False)
title = db.Column(db.String(255), unique=False)
status = db.Column(db.String(255), default=1)
update_time = db.Column(db.String(255), default=int(time.time()))
create_time = db.Column(db.String(255), unique=False)
我查询全部的时候是,得出的结果类型是 list
from App.main.users import models
data = models.users.query.all()
我查询单条的时候是一个得出的类型是一个 class
from App.main.users import models
data = models.users.query.filter_by(id=1).first()
话说那这个单条我怎么取结果呢?
我就想各位大神发点 github 的 flask+mysql 的项目给我看看你们是怎么写的。
1
smallgoogle OP |
2
sunhk25 2019-02-18 07:41:40 +08:00 via Android
可以为每个模型类定义一个 tojson 函数
模型多的时候同问有什么优雅的实现方法吗? |
4
nuance2ex 2019-02-18 08:29:11 +08:00 via iPhone
|
5
mxy940127 2019-02-18 09:13:47 +08:00
class BaseModel(object):
def __init__(self, **kwargs): self.add_attr(**kwargs) def add_attr(self, **kwargs): for key in kwargs.keys(): setattr(self, key, kwargs[key]) query = db_session.query_property() def convert_to_dict(self): d = self.__dict__ d.pop('_sa_instance_state') return d |
6
Caratpine 2019-02-18 09:52:56 +08:00
@sunhk25 #2
Model 继承下面的类 <script src="https://gist.github.com/Caratpine/47f4ecdb6073397b41576ba2ee44d76a.js"></script> |
7
Caratpine 2019-02-18 09:54:39 +08:00
@sunhk25 #2
class JSONSerializer(object): __json_public__ = None __json_hidden__ = None __json_default_modifiers__ = {} __json_custom_modifiers__ = {} def get_field_names(self): for p in self.__mapper__.iterate_properties: yield p.key @property def to_json(self): field_names = self.get_field_names() public = self.__json_public__ or field_names hidden = self.__json_hidden__ or [] self.__json_default_modifiers__.update(self.__json_custom_modifiers__) modifiers = self.__json_default_modifiers__ rs = dict() for key in public: rs[key] = getattr(self, key) for key, callback in modifiers.items(): if hasattr(self, key): value = getattr(self, key) rs[key] = callback(value) for key in hidden: rs.pop(key, None) return rs |
8
l1xnan 2019-02-18 11:21:30 +08:00
序列化的话,用 marshmallow,配套的有 marshmallow-sqlalchemy、flask-marshmallow,用着很方便……
|