我使用 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关系
尽管进行了大量研究和反复试验,但不幸的是,我还没有针对以下用例的优雅解决方案:用户有多个帖子,这些帖子被正确实现为一对多关系。我想向用户加载他的所有帖子,但不是帖子的所有属性,而是仅加载某些属性。
方法一:查找
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
我试图找出模型之间的复杂关系。我有一个名为“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) 核心问题:我有一个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 不存在”
为什么这会发生在我身上?
如何Message
在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.
我有3个数据库表.一个是图像,另外两个是人物和地方.由于每个人可以拥有许多图像,并且每个地方都可以拥有许多图像,因此我希望人与图像以及地点和图像之间存在一对多的关系.
外键是否必须与主键名称相同?或者我可以在images表中调用一些通用的外键,例如"PKTableID".这样我只需要一个图像表.
非常感谢.
问候,
想要只有一个图像表的原因是因为每个图像只引用一个其他表.除此之外,我在这里使用了两个表的示例,我将使用的实际数据库将有20个表,所以我想知道是否仍然可以使用单个图像表来实现20个一对多的关系?
我想知道在InnoDB中定义关系时代表CASCADE的是什么?
我看到它与动作有关:ON DELETE&ON UPDATE.
我是否必须在表格中的每个关系上将其设置为CASCADE?
mysql innodb database-relations cascading-deletes sql-delete
mysql ×3
sql ×2
associations ×1
database ×1
django ×1
innodb ×1
join ×1
permissions ×1
php ×1
postgresql ×1
python ×1
self ×1
sql-delete ×1
sql-server ×1
t-sql ×1
typeorm ×1