我只做过没有关系的数据库,但现在我需要做一些更严肃和正确的事情。
这是我的 SQL (SQLite) 架构:
CREATE TABLE Post (
Postnr INTEGER NOT NULL PRIMARY KEY,
Bynavn VARCHAR(50) NOT NULL
);
CREATE TABLE Kunde (
CPR INTEGER NOT NULL PRIMARY KEY,
Navn VARCHAR(50) NOT NULL,
Tlf INTEGER NOT NULL,
Adresse VARCHAR(50) NOT NULL,
Postnr INTEGER NOT NULL
CONSTRAINT fk_postnr_post REFERENCES Post(Postnr)
);
CREATE TABLE Varegruppe (
VGnr INTEGER PRIMARY KEY,
Typenavn VARCHAR(50) NOT …Run Code Online (Sandbox Code Playgroud) 嘿,所以我最近意识到为了建立外键关系,我需要将我的表转换为 innodb。我是想这样做在phpMyAdmin和发现“存储引擎(类型)”选项。然而我的选项下拉列表仅限于:MyISAM,MEMORY,和MRG_MYISAM
谁能解释一下这是为什么?
apache 2.0
phpmyadmin 3.3.10
mysql 5.0.67
php 5.2.2
Run Code Online (Sandbox Code Playgroud)
谢谢!
我的 tabularinline 字段有问题。我有这样的模型
class Product(models.Model):
....
class Pemesanan(models.Model):
produks = models.ManyToManyField(Product, verbose_name=u"Kode Produk", through='Foo')
class Foo(models.Model):
product = models.ForeignKey(Product)
...
Run Code Online (Sandbox Code Playgroud)
Foo 类是一个中间类(manytomany 字段),具有 Pemesanan 类和 Product 类。它有一个 Pemesanan 类的外键字段。Foo 类在 change_form 模板中显示为 tabularinline,如下所示http://upload.ui.ac.id/?a=d&i=845380
但我的问题是字段产品没有显示为相关的查找字段,因为它显示为普通表单(不是内联的)。这是我的管理员
class FooInline(admin.TabularInline):
model = Foo
extra = 0
allow_add = True
class PemesananAdmin(admin.ModelAdmin):
....
search_fields = ['produks']
raw_id_fields = ('produks',)
related_lookup_fields = {
'm2m': ['produks'],
}
inlines = [
FooInline,
]
exclude = ('produks',)
Run Code Online (Sandbox Code Playgroud)
我已经使用了自动完成功能,但由于教程不完整,这里似乎很难实现。那么有没有办法让我的相关查找工作在我的 tabularinline 中?非常感谢:D。
我正在尝试为对象手动设置外键 ID,但没有找到方法
class Item
{
/**
* @ORM\ManyToOne(targetEntity="MyBundle\Entity\ItemType", inversedBy="itemTypes")
* @ORM\JoinColumn(name="type_id", referencedColumnName="id")
*/
protected $item_type;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做一些链接?
$item = new Item();
$item->setItemTypeId(1); // This generate an error.
Run Code Online (Sandbox Code Playgroud)
还是我必须这样做?
$item = new Item();
$type = Repository::RetrieveById(1);
$item->setItemType($type); // This generate an error.
Run Code Online (Sandbox Code Playgroud) 我有一个两列作为主键的表。这两列也是引用同一张表的外键:(这个表是前段时间离职的人创建的)
CREATE TABLE [dbo].[tblItemLink](
[ItemListID] [int] NOT NULL,
[ItemID] [int] NOT NULL,
CONSTRAINT [PK_tblItemList] PRIMARY KEY CLUSTERED
(
[ItemListID] ASC,
[ItemID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblItemLink] WITH CHECK ADD CONSTRAINT [FK_tblItemLink_tblItemLink] FOREIGN KEY([ItemListID], [ItemID])
REFERENCES [dbo].[tblItemLink] ([ItemListID], [ItemID])
GO
ALTER TABLE [dbo].[tblItemLink] CHECK CONSTRAINT [FK_tblItemLink_tblItemLink]
GO
Run Code Online (Sandbox Code Playgroud)
实际上,ItemID 指的是 tblItem.ItemID,而 ItemListID 在 DB 中的其他任何地方都找不到,但在应用程序中有相应的 enum。
主键是否有任何理由也是引用自身的外键(即一些未记录的性能改进),或者这只是一个错误?
我定义了以下实体:
@Entity
public class Child implements Serializable
{
@Id
@ManyToOne(cascade = CascadeType.ALL)
public Parent parent;
@Id
public int id;
}
@Entity
public class Parent
{
@Id
public int id;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码持久化 Child 时:
Parent p = new Parent();
p.id = 1;
Child c1 = new Child();
c1.id = 1;
c1.parent = p;
em.persist(c1);
Run Code Online (Sandbox Code Playgroud)
Hibernate 抛出“违反参照完整性约束”错误:
Caused by: org.h2.jdbc.JdbcSQLException: Referential integrity constraint violation: "FK3E104FC802AAC0A: PUBLIC.CHILD FOREIGN KEY(PARENT_ID) REFERENCES PUBLIC.PARENT(ID) (1)"; SQL statement:
insert into Child (parent_id, id) values (?, ?) [23506-171] …Run Code Online (Sandbox Code Playgroud) 这是我尝试执行的确切 SQL(在 Windows 上使用 SQLYog 作为 MySQL 客户端):
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE = INNODB ;
DROP TABLE IF EXISTS `temp`;
CREATE TEMPORARY TABLE `temp` (
dish_id INT (11) NOT NULL,
user_id INT (11) NOT NULL,
UNIQUE KEY (dish_id, user_id),
FOREIGN KEY `test` (dish_id) REFERENCES test (id)
) ENGINE = INNODB ;
Run Code Online (Sandbox Code Playgroud)
这是尝试创建时收到的确切错误temp:
Error Code: 1215
Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)
在我看来,一切都井井有条——两个相关密钥的数据类型和签名是相同的;这些名字似乎是犹太洁食;到底是怎么回事?
我究竟做错了什么?为什么无法创建外键约束?
我有两个模型:Person和Department。每个人可以在一个部门工作。部门可以由很多人管理。我不确定如何在 Django 模型中构建这种关系。
这是我失败的尝试之一 [models.py]:
class Person(models.Model):
department = models.ForeignKey(Department)
firstname = models.TextField(db_column='first_name')
lastname = models.TextField(db_column='last_name')
email = models.TextField(blank=True)
class Department(models.Model):
administration = models.ManyToManyField(Person)
name = models.TextField()
Run Code Online (Sandbox Code Playgroud)
我知道该代码不起作用,因为在定义部门之前,该类在其 ForeignKey 关系中Person引用了Department该类。同样,如果我将 Department 定义移到 Person 定义之前,则Department该类将Person在定义 Person 之前在其多对多关系中引用该类。
在 Django 中建模这种特定关系的正确方法是什么?如果您能提供示例(我是新手),我将不胜感激。
假设我有以下数据:
表some_table:
some_table_id | value | other_table_id
--------------------------------------
1 | foo | 1
2 | bar | 2
Run Code Online (Sandbox Code Playgroud)
表other_table:
other_table_id | value
----------------------
1 | foo
2 | bar
Run Code Online (Sandbox Code Playgroud)
在这里,some_table有一个外键列other_table_id从other_table某个名称的列进入。
在 PostgreSQL 中使用以下查询:
SELECT *
FROM some_table
WHERE other_table_id = 3;
Run Code Online (Sandbox Code Playgroud)
如您所见,3不存在于other_table此查询显然将返回 0 个结果。
在不进行第二次查询的情况下,有没有办法知道我用作过滤器的外键是否有效地不存在于other_table?
理想情况下,作为稍后可以解析的错误(例如,在使用错误的外键执行 anINSERT或 anUPDATE时会发生这种情况)。
我想获取一个特定的Video对象,然后Rating使用 ForeignKey 反向查找找到与其关联的所有对象,如文档中所述。
我有模型:
class Video(models.Model):
...
rating_int = models.IntegerField(default=1, choices=CHOICES, name='rating_int')
def __str__(self):
return self.title
class Rating(models.Model):
video = models.ForeignKey('Video', related_name='video', null=True)
Run Code Online (Sandbox Code Playgroud)
和意见:
def video_ratings(request):
vid_rate = Video.objects.get(pk=1)
ratings_of_video = vid_rate.rating_set.all()
context = {
'vid_rate': vid_rate, 'ratings_video': ratings_of_video
}
return HttpResponse(template.render(context, request))
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此程序时出现错误 'Video' object has no attribute 'rating_set'
但是当我阅读 django 文档时,它告诉我当你进行反向查找时你需要使用这个_set.all()命令。我不确定这里缺少什么。
foreign-keys ×10
sql ×4
django ×3
mysql ×2
primary-key ×2
doctrine-orm ×1
innodb ×1
jpa ×1
jpa-2.0 ×1
many-to-one ×1
php ×1
phpmyadmin ×1
postgresql ×1
python ×1
symfony ×1
windows ×1