标签: database-relations

将父模型对象和子模型对象保存在一起

我使用 Django 2.0 和 mysql 数据库,我的项目模型是这样的:

class Parent(models.Model):
    name = models.CharField()

class Child(models.Model):
    number = models.IntegerField()
    parent = models.ForeignKey(Parent)
Run Code Online (Sandbox Code Playgroud)

我想要的是同时将父对象和子对象保存在一起,以便在任何情况下子对象有错误(例如数字字段是“某些文本”)并且无法保存父对象不会保存。

在 Flask(使用 postgresql)中有 add(object) 和 add_all([parent, child]) 方法,我使用了 add_all 所以如果孩子有错误,父母不会保存。

但是在 Django 中我找不到这个方法。

默认方法是:

parent = Parent(name = "my name")
parent.save()

child = Child(number=3, parent=parent)
child.save()
Run Code Online (Sandbox Code Playgroud)

我想要的是这样的:

parent = Parent(name = "my name")
child = Child(number=3, parent=parent)
Run Code Online (Sandbox Code Playgroud)

进而:

child.save(with related parent)
Run Code Online (Sandbox Code Playgroud)

或者:

save(parent, child together)
Run Code Online (Sandbox Code Playgroud)

PS:我阅读了这个链接,我认为“SET”方法是我所需要的,但我不确定如何使用它以及它是否是解决方案: django关系

python mysql django database-relations django-models

2
推荐指数
1
解决办法
2075
查看次数

TypeORM:仅加载某些指定字段的关系

尽管进行了大量研究和反复试验,但不幸的是,我还没有针对以下用例的优雅解决方案:用户有多个帖子,这些帖子被正确实现为一对多关系。我想向用户加载他的所有帖子,但不是帖子的所有属性,而是仅加载某些属性

方法一:查找

await this.usersRepository.find({relations: ['posts']});
Run Code Online (Sandbox Code Playgroud)

这里我无法在任何地方定义相应的选择限制。

方法 2:查询生成器

await this.usersRepository.createQueryBuilder('user')
.leftJoinAndSelect('user.posts', 'posts').select('posts.title').getMany();
Run Code Online (Sandbox Code Playgroud)

这里我假设定义了限制,但选择似乎仅指用户。

我错过了什么吗?或者对于我的用例没有预期的解决方案?

我将非常感谢您的帮助,谢谢大家!

TypeORM 版本 0.2.22

database-relations typeorm

2
推荐指数
1
解决办法
2万
查看次数

has_many 孩子和 has_many 父母

我试图找出模型之间的复杂关系。我有一个名为“Concept”的模型,它有两个继承类型,称为“Skill”和“Occupation”。基本上这意味着每个概念代表一个类别,但是当深入到层次树中时,一个概念也可以是一种技能或职业。

我正在通过使用 STI 解决这个层次结构。所以我的概念表模式如下所示:

class CreateConcepts < ActiveRecord::Migration
  def self.up
    create_table :concepts do |t|
      t.string :uri, :null => false, :length => 255
      t.string :type, :null => true, :length => 255
      t.integer :isco_code, :null => true
      t.timestamps
    end
  end

  def self.down
    drop_table :concepts
  end
end
Run Code Online (Sandbox Code Playgroud)

类型列确定概念是真正的“概念”还是“技能”/“职业”。然而现在的问题是以下关系:

编辑:

  • 概念可以属于单个父概念
  • 一个职业可以属于一个单亲概念
  • 一个技能可以属于多个父概念
  • 技能没有子级
  • 职业没有孩子

所以基本上你会有这样的事情:

>                             concept1
>                  concept2                  concept3
>        concept4       concept5        concept6     concept7    skill1 
> occup1   skill2 occup2    skill5
> occup7    skill2  occup3   skill4
> occup4    skill1 occup8
Run Code Online (Sandbox Code Playgroud)

我希望图片有点清楚我要解释的内容。目前我已经创建了以下迁移来尝试解决父子关系,但我不确定如何将其与关联映射...

class CreateConceptLinks …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails database-relations associations

1
推荐指数
1
解决办法
2500
查看次数

为什么我以 postgres 用户身份登录时只能看到 postgreSQL 关系或表?

可能重复:
postgresql 数据库所有者无法访问数据库 - “未找到关系。”

核心问题:我有一个Django的网站是在抱怨的关系(表)不存在的,当我连接到它试图运行所产生的SQL脚本pg_dump MY_DATABASE_NAME -cOx -E UTF8 > MY_SCRIPT_NAME.sql

运行脚本之前,我可以连接并且一切正常。

运行该脚本我生活在痛苦的世界,我已经试图通过检查和MY_DATABASE_NAME的改变所有权和使用表中所描述的各种方法,以减轻修改所有者的所有表中的PostgreSQL的同时

这似乎是我只能看到通过关系\dt上MY_DATABASE_NAME仅作为postgres用户最早登陆我的服务器上,像这样经过:sudo su - postgres

当我在psql MY_DATABASE_NAME -U MY_NON_POSTGRES_USER 没有切换到 postgres 用户的情况下通过SSH 运行并运行时,\dt' results in a没有找到任何关系的消息。

起初我认为权限或所有权是问题所在。我以服务器的 postgres 用户身份登录,并将 MY_DATABASE_NAME 及其所有表的所有者更改为 MY_NON_POSTGRES_USER。

结果和之前一样。我的 postgres 用户显示了关系,但以另一个角色登录会导致“未找到关系”消息,并且我的网站抱怨“关系 some_table 不存在”

为什么这会发生在我身上?

postgresql permissions database-relations

1
推荐指数
1
解决办法
4966
查看次数

如何实现mySQL自我关系?

如何Message在mySQL中创建一个表格来存储消息及其响应?

在此输入图像描述

mysql sql database-relations self

1
推荐指数
1
解决办法
3159
查看次数

MySQL加入,如何输出关系"正确的方式"

首先,请原谅我糟糕的主题标题.我根本不知道如何制定这个问题或谷歌后面的内容,所以如果这是一个容易回答的问题,请不要开枪.

假设我有以下表格:

[作者] id,姓名

[NEWS] id,item,author_id

如果我想显示一个新闻项并输出相应的作者(存储在author_id中),我会做以下查询:

SELECT * FROM `news` JOIN `authors` ON news.author_id = authors.id
Run Code Online (Sandbox Code Playgroud)

然后通过做这样的事情输出它

$Q = "SELECT * FROM news JOIN authors ON news.author_id=news.id";

$query = $this->lite->query($Q) or die($this->lite->error); 

$result=null; while($obj = $query->fetch_object()){
        $result.= '<li>'.$obj->item. 'by ' . $obj->name . '</li>';
}
Run Code Online (Sandbox Code Playgroud)

这里,$ obj-> name将包含作者的名称并将成功输出.

那么,如果"名称"字段被称为"项目",会发生什么?显然会有一些冲突.根据我之前在Propel和symfony的经验,我会做这样的事情:getAuthorId() - > getName() - 但对于这个项目,我需要从头开始编写SQL.

php sql database join database-relations

0
推荐指数
1
解决办法
131
查看次数

T-SQL数据库关系PK FK同名?

脚本

我有3个数据库表.一个是图像,另外两个是人物和地方.由于每个人可以拥有许多图像,并且每个地方都可以拥有许多图像,因此我希望人与图像以及地点和图像之间存在一对多的关系.

外键是否必须与主键名称相同?或者我可以在images表中调用一些通用的外键,例如"PKTableID".这样我只需要一个图像表.

非常感谢.

问候,

编辑:

想要只有一个图像表的原因是因为每个图像只引用一个其他表.除此之外,我在这里使用了两个表的示例,我将使用的实际数据库将有20个表,所以我想知道是否仍然可以使用单个图像表来实现20个一对多的关系?

t-sql sql-server database-relations

0
推荐指数
1
解决办法
1045
查看次数

在InnoDB中定义关系时的CASCADE

我想知道在InnoDB中定义关系时代表CASCADE的是什么?

我看到它与动作有关:ON DELETE&ON UPDATE.

我是否必须在表格中的每个关系上将其设置为CASCADE?

mysql innodb database-relations cascading-deletes sql-delete

0
推荐指数
1
解决办法
1336
查看次数