资讯专栏INFORMATION COLUMN

sqlalchemy使用上的小tip

tyheist / 924人阅读

摘要:地址序列化为灵感来源于多个实例单个实例排除字段仅包括字段关系查询深度默认为增加一些自定义的函数可传递参数的函数像一样使用与相比为什么很多人都认为更好用大概就是因为更方便基本查询已实现示例关系查询其它去掉一些的重复工作以为例通过继承中的就

GitHub地址: https://github.com/honmaple/maple-json

sqlalchemy object序列化为json

灵感来源于 Django REST framework

多个实例
posts = Post.query.all()
serializer = Seralizer(posts,many=True)
data = serializer.data

单个实例
post = Post.query.first()
serializer = Seralizer(post,many=False)
data = serializer.data

排除字段
serializer = Seralizer(post,exclude=["title"])

仅包括字段
serializer = Seralizer(post,include=["title"])

关系查询深度
serializer = Seralizer(post,depth=3)

depth

默认为2

增加一些自定义的函数
serializer = Serializer(post,extra=["get_post_count"])

Post

class Post(Model):
    ......
    def get_post_count(self):
        return 11

可传递参数的函数
class PostSerializer(Serializer):
    count = Field(source = "get_post_count",args={"name":"hello"},default=20)
    class Meta:
        include = []
        depth = 2
        include = []
        exclude = []
        extra = ["count"]

像django orm一样使用sqlalchemy

djang orm与sqlalchemy相比,为什么很多人都认为django orm更好用,大概就是因为django orm更方便

基本查询(已实现)

gt

lt

lte

gte

contains

in

exact

iexact

startswith

istartswith

iendswith

endswith

isnull

range

year

month

day

示例:

Post.query.filter_by(title__contains = "sql").all()
Post.query.exclude_by(title__contains = "sql").all()

关系查询
Post.query.filter_by(tags__name__contains = "sql").all()

其它
Post.query.filter_by(tags__name__contains = "sql").or(Post.id == 1,Post.id == 2).all()
Post.query.filter_by(tags__name__contains = "sql").and(Post.id == 1,Post.id == 2).all()
Post.query.filter_by(tags__name__contains = "sql").exists()
Post.query.load_only("title")

去掉一些sqlalchemy的重复工作

flask-sqlalchemy为例,通过继承 models.py 中的Mixin,就可以去除部分重复工作

ModelMixin

自增ID – id

post = Post(·····)
post.save() # 保存
post.delete() # 保存

批量操作

bulk_insert

bulk_update

bulk_save

ModelTimeMixin

增加两字段

created_at

数据创建时间

updated_at

数据更新时间

ModelUserMixin

关联用户表,与User表现为多对一关系(即一个用户有多个post)

class Post(ModelUserMixin, Model):

    user_related_name = "posts"
    titile = ...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38522.html

相关文章

  • Flask扩展之flask-sqlalchemy(上)

    摘要:查询记录在调试或测试模式自动启用。可以用于显式禁用原生支持。当使用不合适的指定无编码的数据库默认值时,这对于一些数据库适配器是必须的比如上某些版本的。这对是必要的,它默认移除闲置多于小时的连接。注意如果使用了,自动设定这个值为小时。 flask-sqlalchemy是flask的一个ORM扩展框架,这个扩展在sqlalchemy的进行的扩展,更方便的结合Flask.什么是ORM?其是O...

    KaltZK 评论0 收藏0
  • Python与数据库的新人手册 -- MySQL

    摘要:首先,使用连接数据库并定义表结构初始化。创建新对象添加到批量添加子非鱼虞姬花木兰提交即保存到数据库结果查的函数会返回一个对象。一对多在的一对多关系中,使用来表示表的外键,表示表与表之间关联的属性。 Python支持的数据库有很多,MySQL作为主流数据库之一,我们不妨了解下它们之间的小故事Python操作MySQL的库有三个,python-MySQL(MySQLdb),PyMySQL跟...

    hedzr 评论0 收藏0
  • Python与数据库的新人手册 -- MySQL

    摘要:首先,使用连接数据库并定义表结构初始化。创建新对象添加到批量添加子非鱼虞姬花木兰提交即保存到数据库结果查的函数会返回一个对象。一对多在的一对多关系中,使用来表示表的外键,表示表与表之间关联的属性。 Python支持的数据库有很多,MySQL作为主流数据库之一,我们不妨了解下它们之间的小故事Python操作MySQL的库有三个,python-MySQL(MySQLdb),PyMySQL跟...

    endiat 评论0 收藏0
  • Python与数据库的新人手册 -- MySQL

    摘要:首先,使用连接数据库并定义表结构初始化。创建新对象添加到批量添加子非鱼虞姬花木兰提交即保存到数据库结果查的函数会返回一个对象。一对多在的一对多关系中,使用来表示表的外键,表示表与表之间关联的属性。 Python支持的数据库有很多,MySQL作为主流数据库之一,我们不妨了解下它们之间的小故事Python操作MySQL的库有三个,python-MySQL(MySQLdb),PyMySQL跟...

    liuyix 评论0 收藏0
  • Python与数据库的新人手册 -- MySQL

    摘要:首先,使用连接数据库并定义表结构初始化。创建新对象添加到批量添加子非鱼虞姬花木兰提交即保存到数据库结果查的函数会返回一个对象。一对多在的一对多关系中,使用来表示表的外键,表示表与表之间关联的属性。 Python支持的数据库有很多,MySQL作为主流数据库之一,我们不妨了解下它们之间的小故事Python操作MySQL的库有三个,python-MySQL(MySQLdb),PyMySQL跟...

    defcon 评论0 收藏0

发表评论

0条评论

tyheist

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<