首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在SQLAlchemy关系()中使用sortedcontainers.SortedList?

在SQLAlchemy关系()中使用sortedcontainers.SortedList,可以通过自定义排序列表类型来实现。

首先,需要导入sortedcontainers库和SQLAlchemy库:

代码语言:txt
复制
from sortedcontainers import SortedList
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

然后,创建一个自定义的排序列表类型,继承自SQLAlchemy的MutableList类型,并重写其中的一些方法:

代码语言:txt
复制
from sqlalchemy.ext.mutable import MutableList

class SortedListType(MutableList):
    def __init__(self, item_type):
        self.item_type = item_type
        super(SortedListType, self).__init__()

    def append(self, value):
        super(SortedListType, self).append(value)
        self.sort()

    def remove(self, value):
        super(SortedListType, self).remove(value)

    def sort(self):
        super(SortedListType, self).sort()

    def __setitem__(self, index, value):
        super(SortedListType, self).__setitem__(index, value)
        self.sort()

    def __getstate__(self):
        return list(self)

    def __setstate__(self, state):
        self[:] = state

    def __getitem__(self, index):
        return super(SortedListType, self).__getitem__(index)

    def __len__(self):
        return super(SortedListType, self).__len__()

    def __iter__(self):
        return super(SortedListType, self).__iter__()

    def __delitem__(self, index):
        super(SortedListType, self).__delitem__(index)

    def __eq__(self, other):
        return list(self) == other

    def __ne__(self, other):
        return list(self) != other

    def __repr__(self):
        return repr(list(self))

    def __str__(self):
        return str(list(self))

接下来,在定义模型类时,将关系字段的类型设置为刚才定义的排序列表类型:

代码语言:txt
复制
Base = declarative_base()

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = Column(SortedListType(Integer))

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

现在,可以在关系()中使用sortedcontainers.SortedList了:

代码语言:txt
复制
parent = Parent()
parent.children = SortedList([3, 1, 2])
session.add(parent)
session.commit()

child = Child()
child.parent = parent
session.add(child)
session.commit()

# 查询parent的children,并按照排序列表的顺序返回
sorted_children = session.query(Parent).filter_by(id=parent.id).first().children
print(sorted_children)

这样,就可以在SQLAlchemy关系()中使用sortedcontainers.SortedList了。请注意,这里的示例代码仅供参考,具体的实现方式可能会根据实际需求有所调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Tornadosqlalchemy使用

在学tornado的时候涉及以下数据库操作,现在暂时使用mysql数据库,所以选择了一个比较好用的ORM工具sqlalchemy,顺便记一下使用过程 安装 首先安装mysql pip安装必要的库:pip..., from mod.databases.tables import Article 另一方面db函数上方 @property 标注是python关于属性的标注,有了这个标注就可以使用self.db来直接获取连接对象...其他的使用方法可以参考sqlalchemy的官方文档 http://docs.sqlalchemy.org/en/rel_1_0/or......self.db.add(new_user) self.db.commit() 但紧接着,我又做了一件没有什么必要做的事情(请不要吐槽,我只是这么写了一下,其实目的是检测一下这个用户是否在数据库存在了...200 data["data"] = "Register Success" 标记2 self.write(data) 但是这么做令我出现了一个麻烦 在我注册成功后,我从数据库紧接着删除了这个用户

1.6K60
  • 【DB笔试面试511】如何在Oracle写操作系统文件,写日志?

    题目部分 如何在Oracle写操作系统文件,写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令。 Oracle使用哪个包可以生成并传递数据库告警信息?...在CLIENT_INFO列存放程序的客户端信息;MODULE列存放主程序名,包的名称;ACTION列存放程序包的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle写操作系统文件,写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

    28.8K30

    使用 PageRank 找到关系的牛人

    本篇会在前面抓取的500w简书的粉丝数据上,使用 PageRank 找到其中的排名靠前的用户。 0x01 前期准备 1....数据准备 数据的存储格式如下,这也是我们在生产环境中经常使用的数据格式,因此在爬虫获取的阶段已经处理完毕。这份数据是一个有向图,左边为用户,右边为他的粉丝。 ?...画一下关系图呢,但是数据量太大,后续到数据可是化的时候用Gephi或者Tableau玩一下。...由于整个关系网是以我为入口爬取,因此在排名考前的一些用户主要是三种类型: 数据相关的从业者(我关注的人以及我的粉丝大部分都会是类似的用户) 鸡汤类作家(简书的主旋律) 经常画画的简书用户(之前画过一些简笔画...如果按照这种方式,简书或者CSDN这种博客网站,是不是可以将PageRank值作为推荐的一个权重,用于推荐系统

    1K20

    何在CDH安装和使用StreamSets

    [t1kggp7p0u.jpeg] [gthtxgcxg9.jpeg] 2.文档编写目的 ---- 本文档主要讲述如何在Cloudera Manager 管理的集群安装StreamSets和基本使用。...Field Masker提供固定和可变长度的掩码来屏蔽字段的所有数据。要显示数据的指定位置,您可以使用自定义掩码。...要显示数据的一组位置,可以使用正则表达式掩码来定义数据的结构,然后显示一个或多个组。...对于更一般的管道监控信息,您可以使用度量标准规则和警报。 Jython Evaluator的脚本为没有信用卡号码的信用卡交易创建错误记录。...我们将使用带有record:value()函数的表达式来标识信用卡号码字段/credit_card为空的情况。该函数返回指定字段的数据。

    35.9K113

    在Excel处理和使用地理空间数据(POI数据)

    ,用于加载工作底图) III 其他 (非必须,自己下载的卫星图,自己处理的地图,绘制的总平面等——用于自定义底图) 03 具体操作 打开数据表格——[插入]选项卡——三维地图——自动打开三维地图窗口...https://support.office.com/zh-cn/article/三维地图入门-6b56a50d-3c3e-4a9e-a527-eea62a387030) ---- 接下来来将一些[调试]的关键点...I 坐标问题 理论上地图在无法使用通用的WGS84坐标系(规定吧),同一份数据对比ArcGIS的WGS84(4326)和Excel的WGS84、CJ-02(火星坐标系)的显示效果,可能WGS84(...4326)坐标系更加准确一点,也有查到说必应地图全球统一使用WGS84坐标系。...⇩不同坐标系下的对比 结论:建议使用WGS84坐标系(使用Sid分享脚本的用户可略过) II 自定义底图 Excel提供的底图为必应地图,虽然有很多种色彩体系,但不支持去掉路名、点位名称等标签,可能有点乱

    10.9K20

    技术干货| 如何在MongoDB轻松使用GridFS?

    什么时候使用GridFS 在MongoDB使用GridFS存储大于16 MB的文件。 在某些情况下,在MongoDB数据库存储大型文件可能比在系统级文件系统上存储效率更高。...此外,如果文件均小于16 MB BSON文档大小限制,请考虑将每个文件存储在单个文档,而不是使用GridFS。您可以使用BinData数据类型存储二进制数据。...GridFS通过使用存储桶名称为每个集合添加前缀,将集合放置在一个公共存储桶。...如果希望将其他任意字段添加到文件集合的文档,请将其添加到元数据字段的对象。 GridFS索引 GridFS使用每个块和文件集合上的索引来提高效率。...该索引允许高效地检索文件,本示例所示: db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } ) 符合GridFS规范的驱动程序将在读取和写入操作之前自动确保此索引存在

    6.6K30

    Flask框架在Python面试的应用与实战

    在Python面试,对Flask框架的理解与应用能力往往是考察的重点之一。本篇博客将深入浅出地探讨Flask在面试的常见问题、易错点及应对策略,并结合实例代码进行讲解。...模板引擎(Jinja2)变量渲染:说明如何在HTML模板中使用Jinja2语法插入动态内容,包括简单变量、列表、字典的展示。...数据库操作ORM与SQLAlchemy:解释如何集成SQLAlchemy实现对象关系映射(ORM),创建模型、执行CRUD操作。...Flask-SQLAlchemy扩展:简述Flask-SQLAlchemy提供的便捷接口,db.session管理事务、db.Model基类等。...SQL注入风险:使用ORM时,避免直接拼接SQL语句。依赖于SQLAlchemy提供的查询API构建查询,确保参数化查询的安全性。

    23010

    何在Linux检查内存使用情况

    在对系统或应用程序速度减慢或行为异常进行故障排除时,首先要检查的问题之一是系统内存使用情况。 本文介绍了如何使用几种不同的命令来检查Linux的RAM使用情况。...它还显示了系统摘要,包括内存使用情况。 要调用命令,只需键入top: free -h 输出将如下所示: 输出的标头包含有关系统的总,可用和已用物理内存和交换内存的信息。...使用less或cat查看/proc/meminfo文件的内容: cat /proc/meminfo 该文件包含有关系统内存和交换使用的大量信息: MemTotal: 4030592 kB...可以解析/proc/meminfo文件的信息,并在shell脚本中使用。 ps_mem脚本 ps_mem是一个Python脚本,用于报告每个程序的RAM内存使用情况。...它可以与Python 2和3一起使用,并且可以使用pip安装 sudo pip3 install ps_mem 运行ps_mem需要管理员权限: sudo ps_mem 输出将按升序包括每个正在运行的程序的内存使用情况

    5.8K30

    何在Spring优雅的使用单例模式?

    Java使用构造方法去创建对象可以有三种方式: 使用new关键字 使用Class.getInstance(通过反射调用无参构造方法) 使用Constructor.newInstance(实则也是通过反射的方式调用任何构造方法...Spring下使用单例模式 最成功的单例并不是双重检验锁,而是枚举,枚举本身就是一种单例,并且无法使用反射攻击,再一个最优雅的是Spring本身实现的单例: 常用Spring @Repository、...,在调用过程可能会出现多个Bean实例,导致蜜汁错误。...实现单例的原因 把类注册为组件Bean后,从运行开始到结束,类只加载到内存一次,类进行初始化,该组件的生命周期就交由Spring容器管理,声明为单例的组件在Spring容器只会实例化一个Bean,多次请求复用同一个...Bean,Spring会先从缓存的Map查询是否存在该Bean,如果不存在才会创建对象。

    6.4K20
    领券