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

如何在peewee中创建自引用多对多字段?

在peewee中创建自引用多对多字段可以通过使用ForeignKeyFieldManyToManyField来实现。

首先,我们需要定义一个模型类来表示该字段的实体。假设我们要创建一个名为User的模型类,其中包含一个自引用多对多字段friends,可以按照以下方式定义:

代码语言:python
代码运行次数:0
复制
from peewee import *

database = SqliteDatabase('my_database.db')

class User(Model):
    name = CharField()
    friends = ManyToManyField('self', backref='friends')

    class Meta:
        database = database

在上述代码中,friends字段是一个多对多字段,它引用了自身。backref参数用于指定反向引用的名称,即每个用户对象都可以通过friends属性访问其朋友列表。

接下来,我们需要创建数据库表来存储该模型类的数据。可以使用create_tables方法来创建表:

代码语言:python
代码运行次数:0
复制
database.create_tables([User])

现在,我们可以使用该模型类来创建用户对象并建立朋友关系。以下是一个示例:

代码语言:python
代码运行次数:0
复制
# 创建用户对象
user1 = User.create(name='User 1')
user2 = User.create(name='User 2')
user3 = User.create(name='User 3')

# 建立朋友关系
user1.friends.add(user2)
user1.friends.add(user3)

# 获取用户的朋友列表
friends = user1.friends

for friend in friends:
    print(friend.name)

在上述示例中,我们首先创建了三个用户对象,然后通过add方法建立了朋友关系。最后,我们通过遍历friends属性来获取用户的朋友列表,并打印出每个朋友的名称。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,建议您参考腾讯云的官方文档或咨询腾讯云的技术支持团队,以获取与peewee和云计算相关的产品信息。

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

相关·内容

DRFManytoMany字段的更新和添加

背景:drf的序列化器给模型输出带来了便利但是对于字段网上查询的内容却是很少(也有可能是本人不会搜答案)经过我多个日夜的摸索,终于实现了我的需求,现将自己的心得记录一下说下我的需求:定义一个订单模型里面的订单...orderId 是自动生成的UUID订单的区域是外键,下单人也是外键,菜品orderMenu是一个字段(其实通过我查到的方法说的都是外键字段就可以实现但是个人觉得菜品和订单应该是多会比较好理解...orderMenu = request.data.get('orderMenu') for i in orderMenu: # 我的思路是既然不能在更新主表的时候更新字段那就单独把字段提出来更新...# 在传入字段的时候同步传入需要更新的中间表id obj = OrderCenterThough(pk=i.get('id')) #...,这里获取主订单的id #print(serializer.instance.pk) # 遍历字段 for i in orderMenu:

91820
  • 经验拾忆(纯手工)=> Python-

    安装和导入 pip install peewee from peewee import * # peewee的模块很结构化,都在peewee,如果懒就都导入进来。...表-记录-字段 ORM语法 和 数据库的 (表-记录-字段)对应关系如下: ORM结构 数据库 类 表 实例(对象) 记录 类属性 列 默认增主键ID 定义一个类,继承了peewee模块的Model...这是关于peewee orm的机制,"你若不指定(primary key)",它就会"自动"为你创建一个 "名为 id", "类型为 int", 并设置为 "primary" 的 "增(auto_increment...不然它不知道你这个表在哪个数据库 既然这样,若我们要在一个数据库创建很多很多表,那岂不是每次都需要给每张表指定一个数据库??...(不覆盖,也 取消 创建默认id字段) 事务 支持with上下文语法,支持事务嵌套,注意嵌套事务 只会回滚 离它最近 的一层之间的代码。

    1.5K10

    2017年Python 开发者应该关注的 7 个类库

    TensorFlow 的推出才过去一年的时间,但是这个库已经在 Python 开发人员获得了相当大的人气。 事实上, TensorFlow 是最时髦 GitHub Python 资源库之一。...#4 Peewee Peewee 是 Python 生态简单的,富有表现力的 ORM ,它支持 SQLite,MySQL 和 PostgreSQL。数据库经常需要为应用去使用扩展的数据。...开发者们以前用 SQLAlchemy 已经创建了一个数据库,应该会觉得使用 Peewee 创建数据库是更容易的。另外,Peewee 一直以来都适用于 Flask web 框架。...点击这里学习如何在 Peewee 创建一个数据库 #5 Sanic + uvloop Sanic 是一个与 Flask 类似,基于 uvloop 的 web 框架,它能让 Python 更快速。...由于缺乏对于如何在新技术之间混合和迁移数据的认识,从数据分析攫取有效的结论将是非常困难的。Blaze 通过提供一个不同种类数据库技术统一的接口以及迁移数据抽象化处理来解决这个难题。

    1.7K90

    Python 开发者 2017 应该关注的 7 个类库

    TensorFlow 的推出才过去一年的时间,但是这个库已经在 Python 开发人员获得了相当大的人气。 事实上, TensorFlow 是最时髦 GitHub Python 资源库之一。...4、Peewee Peewee 是 Python 生态简单的,富有表现力的 ORM ,它支持 SQLite,MySQL 和 PostgreSQL。数据库经常需要为应用去使用扩展的数据。...不过,通过 ad hoc 连接串去 get 和 set 数据库的数据是一项非常有挑战的任务。这种情况下,Peewee 就可以帮很大的忙了。...开发者们以前用 SQLAlchemy 已经创建了一个数据库,应该会觉得使用 Peewee 创建数据库是更容易的。另外,Peewee 一直以来都适用于 Flask web 框架。...由于缺乏对于如何在新技术之间混合和迁移数据的认识,从数据分析攫取有效的结论将是非常困难的。Blaze 通过提供一个不同种类数据库技术统一的接口以及迁移数据抽象化处理来解决这个难题。

    1.6K10

    年薪20万Python工程师进阶(5):Python ORM框架之 Peewee入门

    后来才知道,原来这个叫ORM(Object Relational Mapping,对象关系映射),在Python下面有很多这样的类库,SQLObject、Storm、peewee和SQLAlchemy...接下来就是表的创建创建BaseModel类,在该类下创建子类Meta,Meta是一个内部类,它用于定义peewee的Model类的行为特性。指定dabatase 为 前面定义的db。...再接下来就是表的创建了,我们在SQL语句创建表时一般需要知道以下信息。表的名字,表有哪些字段?这些字段分别是什么类型?是否允许为空,或增?哪个字段是主键是?哪个是外键?...创建 User 和 Tweet类做为表名。在类下面定义的变量为字段名,username、message、created_date等。...不对,我们没有创建user_id字段啊!但是,如果你查询Tweet表,就会发现有这个字段,用它来关联User表的id。 image 四、查询数据 接下来,查询数据。

    1.4K20

    纯Python轻松开发在线留言板!

    2.1 创建数据表 利用peewee构建数据表,需要定义相应的Model类,在类构建的属性即对应表字段,并且在Meta类定义其他的一些属性,譬如下面的例子我们就以最简单的SQLite数据库为例:...,若对应数据库已存在此表,则会跳过 db.create_tables([Model1]) 上述的代码在执行之后,便会在关联到的SQLite数据库创建对应的表: 图3 而除了最简单的SQLite之外...Model创建的知识可以参考http://docs.peewee-orm.com/en/latest/peewee/models.html。...2.2 向表中新增记录 在数据表创建完成之后,我们第一件事当然是要向表插入数据,这在peewee操作非常简单: 「插入单条数据」 在peewee向表插入单条记录可以使用create()方法: #...的内容非常丰富,想要完全记住不太现实,大家可以养成查官网http://docs.peewee-orm.com/en/latest/的习惯,内容非常详细生动,给官方点个赞!

    1.7K40

    (数据科学学习手札120)Python+Dash快速web应用开发——整合数据库

    2.1 创建数据表   利用peewee构建数据表,需要定义相应的Model类,在类构建的属性即对应表字段,并且在Meta类定义其他的一些属性,譬如下面的例子我们就以最简单的SQLite数据库为例...,若对应数据库已存在此表,则会跳过 db.create_tables([Model1])   上述的代码在执行之后,便会在关联到的SQLite数据库创建对应的表: ?...查看更多使用示例,关于更多有关Model创建的知识可以参考http://docs.peewee-orm.com/en/latest/peewee/models.html。...2.2 向表中新增记录   在数据表创建完成之后,我们第一件事当然是要向表插入数据,这在peewee操作非常简单: 插入单条数据   在peewee向表插入单条记录可以使用create()方法:...的内容非常丰富,想要完全记住不太现实,大家可以养成查官网http://docs.peewee-orm.com/en/latest/的习惯,内容非常详细生动,给官方点个赞!

    1.3K20

    像对象一样对待数据

    我们假定一个表示人的类型 Person,包含姓名 name 和生日 birthday 两个字段: class Person(peewee.Model): class Meta:...如果是用过 Django 的同学,这个 Model 应该非常熟悉了。...要注意的就是,需要在 Meta 里定义 database 为前面创建的数据库。然后使用相应的 Field 类型定义字段即可。...通常是增加一个 is_deleted 字段标记已删除的内容。(所以,不要以为在网上把发布过的内容删掉就真的不存在了) > 创建关联数据 在程序,经常会有一些具有关联关系的数据。...自动生成的代码 在我们先前的案例,有一些就使用了 peewee。比如 Python 高频词汇表(关键字:单词)和押韵检索工具(关键字:押韵)。

    72320

    Python:轻量级 ORM 框架 peewee 用法详解

    说明: 1、当 rows 传递的是字典列表时,fields 是不需要传的,如果传了,那么,rows 字段在字典必须存在,否则报错。...peewee 不会为缺失的字段做默认处理。 2、当 rows 传递的是元组列表时,必须指定 fields,并且 fields 字段名的顺序跟元组一致。...这里解释一下,Person 这个模型,我并没有指定主键,peewee 会自动增加一个名为 id 的增列作为主键。...对于“创建或获取”类型逻辑,通常会依赖唯一 约束或主键来防止创建重复对象。但这并不是强制的,比如例子,我以 Name 为条件,而 Name 并非主键。只是最好不要这样做。...五、查询条件 当查询条件不止一个,需要使用逻辑运算符连接,而 Python 的 and、or 在 Peewee 是不支持的,此时我们需要使用 Peewee 封装好的运算符,如下: 逻辑符 含义 样例

    5.8K20

    基于Sanic的微服务基础架构

    在python3.6,官方的异步协程库asyncio正式成为标准。在保留便捷性的同时性能有了很大的提升,已经出现许多的异步框架使用asyncio。...使用aiohttp为Client,其他微服务进行访问。 使用peewee为ORM,但是只是用来做模型设计和migration。 使用opentracing为分布式追踪系统。...span, 用于日志追踪 response进行封装,统一格式 异常处理 抛出的异常进行处理,返回统一格式 任务 创建task消费queuespan,用于日志追踪 异步处理 由于使用的是异步框架...sex, 在BaseModel要先添加name字段 info装饰器会创建表migrate_record来记录migrate,version每个model必须唯一,使用version来记录是否执行过,...peewee的model,会解析model生成API数据, 在field字段的help_text参数来表示引用对象 http://host:ip/openapi/spec.json 获取生成的json数据

    3.7K70

    如何看待 GitHub 上许多笔记、面经等获得过多的 star?

    隔壁的阿猫阿狗,把别人的代码 Clone 下来,同步到 GitHub 上,居然能赚到这么 star。 ? 我突然有赚 1000000000000000000 个 star 的 Idea 了。...隔壁的相同功能的 Peewee 都比它: ? 这个时候,我遇到问题,我去找谁?如果我提了个 Issue,作者解决了我的 issue,star 多多的。...OK 了,那以后我们需求的都是文档。而且,它个告诉我们如何在项目中使用的,也是它的文档而非代码库。 ?...Rule 5:用户有用的才是受欢迎 我在 GitHub 上有近 40000 的 star,其中有:22416 个 star (6248 + 3585 + 3115 + 1985 + 1778 + 1557...Rule 6: Git 是最好的版本管理工具,GitHub 是可能最好的 Git 服务器之一 ,在我的第二本《全栈应用开发:精益实践》里,其早期开源版 growth-ebook ,最初是作为开源应用

    1K10

    Python程序员都会喜欢的6个库,拿走不谢!

    Peewee Peewee是一个小型但是十分强大的库,支持通过ORM的方式访问数据库,原生支持SQLite、MySQL和PostgreSQL等数据库。...为什么需要它: 任何一个需要经常使用外部数据的应用基本都会用到数据库,但是通过临时连接从数据库读写数据会带来很多麻烦。 Peewee提供了一条访问数据库资源的安全、稳定的通道。...Peewee同时原生支持数据库事务 (transaction),并有许多可选的额外模块,提供了从数据库连接池(connection pooling)到类似(many-to-many)的高级field...为什么需要它: 如果你只是想快速创建一个Restful API接口,或者只想用网络开发框架的做一个简单的应用,Bottle可以轻松地满足你的要求。...创建一个应用所需的工作极少,而且Bottle在设计时就考虑了可扩展性,如果需要更多高级功能,随时就可以接入。

    77450

    Python的轻量级ORM框架peewee

    至今已经帮助很多数据从业者解决工作的实际问题,如果你在数据处理上遇到什么困难,欢迎评论区与我交流。...在前面的《改变python对象规则的黑魔法metaclass》一文,我介绍了使用metaclass自己编写ORM框架的思路。 当然python库这类框架非常,我们并没有必要自己去实现。...它的安装非常简单: pip install peewee 如果你在使用mysql数据库的过程中报出如下错误: peewee.ImproperlyConfigured: MySQL driver not...peewee的官方文档地址:http://docs.peewee-orm.com/en/latest/index.html 下面测试一下各项功能: from peewee import * db =...测试创建表: if __name__=="__main__": Person.create_table() 执行完毕,检查数据库成功创建下面这张表: ?

    5.4K20

    Python程序员都会喜欢的6个库

    Peewee ---- Peewee是一个小型但是十分强大的库,支持通过ORM的方式访问数据库,原生支持SQLite、MySQL和PostgreSQL等数据库。...为什么需要它: 任何一个需要经常使用外部数据的应用基本都会用到数据库,但是通过临时连接从数据库读写数据会带来很多麻烦。 Peewee提供了一条访问数据库资源的安全、稳定的通道。...Peewee同时原生支持数据库事务 (transaction),并有许多可选的额外模块,提供了从数据库连接池(connection pooling)到类似(many-to-many)的高级field...为什么需要它: 如果你只是想快速创建一个Restful API接口,或者只想用网络开发框架的做一个简单的应用,Bottle可以轻松地满足你的要求。...创建一个应用所需的工作极少,而且Bottle在设计时就考虑了可扩展性,如果需要更多高级功能,随时就可以接入。

    78150

    Python:logging 的巧妙设计

    我在之前的博客 Python:logging.NullHandler 的使用 中介绍了 peewee 框架的日志输出,简单来说就是 peewee 定义了一个名为peewee 的 Logger 并添加了一个...假设我们在主程序也有一个 Logger,调用 peewee 后,我想将两个日志输出到同一个日志文件中去。...当然我们也可以将主程序的 Logger 名字定为 peewee,但这不仅太 low 了,而且如果再调用一个库,其中也封装好了一个 Logger,就不好处理了。...因此,我们不必为一个应用程序中使用的所有 Logger 定义和配置 handlers,只需要为一个顶层的 Logger 配置 handlers,然后按照需要创建 child loggers 就可足够了。...之前 peewee 的例子也就很容易解决了,只需要将 peewee 日志的 parent 属性设置为主程序的日志就可以了。 结语 其实这是一个比较容易说明的问题,完全没必要写这么

    90430

    Salesforce的租户数据模型

    (该图引用Salesforce官方资料) 租户元数据 Salesforce平台有两个核心的系统内部表:MT_objects 和 MT_fields。它们被用来存储和管理对应租户数据对象的元数据。...枚举型)、增数字(系统自动产生、按行自动增加的数字类型)、派生数据(formula, 只读的派生值)、引用关系(外键)、checkbox(布尔值)、email、URL等。...租户索引 Salesforce平台会自动为各种类型的字段创建索引,以支持更快的数据访问。 传统数据库系统依赖原生的数据库索引实现根据指定条件快速定位相关表记录。...Salesforce平台通过把相关字段数据同步复制到名为MT_indexes的透视表的方式创建索引。...该系统表默认使用两个内置唯一复合索引,以便允许关联对象进行正向或反向遍历。 租户字段历史 通过鼠标操作,Salesforce平台可以提供任一字段的历史轨迹。

    2.5K10
    领券