我在运行迁移时遇到问题。我有一个包含一些表的 mysql 数据库。具体表是product_blender。表中的一些字段是这样的:
- 身份证(PK)
- area_id (FK)
- 居民(varchar)
- heat_type_id (FK)
- ...
现在我想创建另一个名为installateur_types. 该表需要包含一个PK和一个varchar 字段。我还想在表中创建一个FKproduct_blender到我新创建的表的ID。
这就是我所做的:
创建迁移以创建表:
public function up()
{
Schema::create('installateur_types', function(Blueprint $table)
{
$table->increments('id');
$table->string('type');
});
}
public function down()
{
Schema::drop('installateur_types');
}
Run Code Online (Sandbox Code Playgroud)
运行迁移,这是成功的。表是用正确的字段创建的。
然后我创建了迁移以将 FK 字段添加到 product_blender 表中。
public function up()
{
Schema::table('product_blenders', function ($table) {
$table->integer('installateurtype_id')->unsigned();
$table->foreign('installateurtype_id')->references('id')->on('installateur_types')->onDelete('cascade');
});
}
public function down()
{
//
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个User模型和一个Dispute模型。争议包含涉及用户的列表,以及“原告”和“被告”。我希望能够做到这一点:
Dispute.first.users
#[<User 1>, <User 2>]
Dispute.first.accuser
#<User 1>
Dispute.first.defendant
#<User 2>
Run Code Online (Sandbox Code Playgroud)
所以这是我的模型:
class Dispute < ApplicationRecord
has_and_belongs_to_many :users
belongs_to :accuser, polymorphic: true
belongs_to :defendant, polymorphic: true
end
class User < ApplicationRecord
has_and_belongs_to_many :disputes
has_one :user, as: :accuser
has_one :user, as: :defendant
end
Run Code Online (Sandbox Code Playgroud)
迁移:
class CreateDisputes < ActiveRecord::Migration[5.0]
def change
create_table :disputes do |t|
t.references :accuser, polymorphic: true, index: true
t.references :defendant, polymorphic: true, index: true
end
end
end
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用上传图像 models.ImageField(upload_to=upload_location)
def upload_location(instance,filename):
print("%s/%s"%(instance.id,filename))
return "%s/%s" %(instance.id,filename)
Run Code Online (Sandbox Code Playgroud)
但它给出了"GET /media/None/image_qacfEsv.jpg HTTP/1.1"
我尝试使用 slug 字段它工作正常但既不工作id也不pk工作我想使用 obj ID 来命名图像的文件夹,但它none在 id 属性中给出的是我的文件
def upload_location(instance,filename):
print("%s/%s"%(instance.id,filename))
return "%s/%s"%(instance.id,filename)
class Post(models.Model):
draft = models.BooleanField(default=False)
publish = models.DateField(auto_now=False,auto_now_add=False)
user = models.ForeignKey(settings.AUTH_USER_MODEL,default=1)
slug = models.SlugField(unique=True)
title = models.CharField(max_length=120)
image = models.ImageField(upload_to=upload_location,
null=True,blank=True,
width_field="width_field",
height_field="height_field")
height_field = models.IntegerField(default=0)
width_field = models.IntegerField(default=0)
content = models.TextField()
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
Run Code Online (Sandbox Code Playgroud) 我的trophies表:
public function up()
{
Schema::create('trophies', function (Blueprint $table) {
$table->increments('id');
$table->integer('tournament_id')->unsigned()->nullable();
$table->foreign('tournament_id')
->references('id')
->on('tournaments')
->onUpdate('cascade')
->onDelete('cascade')
;
$table->integer('season_id')->unsigned()->nullable();
$table->foreign('season_id')
->references('id')
->on('seasons')
->onUpdate('cascade')
->onDelete('cascade')
;
$table->integer('user_id')->nullable()->unsigned();
$table->foreign('user_id')
->references('id')
->on('users')
->onUpdate('cascade')
->onDelete('cascade');
;
$table->integer('team_id')->nullable()->unsigned();
$table->foreign('team_id')
->references('id')
->on('teams')
->onUpdate('cascade')
->onDelete('cascade')
;
$table->timestamps();
});
}
Run Code Online (Sandbox Code Playgroud)
现在我想删除外键 season_id
public function up()
{
Schema::table('trophies', function (Blueprint $table) {
$table->dropForeign(['season_id']);
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行 php artisan migrate 时,我收到下一个错误:
In Connection.php line 664:
SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'trophies_season_id_foreign'; check that column/key …Run Code Online (Sandbox Code Playgroud) 语境:
我维护遗留的 Django 代码。在许多情况下,我的代码接收多个模型对象,每个模型对象都有一个ForeignKey或代表相同数据实体的手动缓存属性。因此所涉及的数据实体不会改变。但是,并非我收到的所有对象都曾经访问过这些foreignkey字段或缓存的属性,因此数据可能不会出现在这些对象上,尽管它会在第一次访问时延迟加载。
我不容易访问/控制声明模型的代码。
我想找到我拥有的任何一个具有已准备好的缓存的对象,这样我就可以避免访问数据库来检索我想要的数据(如果没有,我会在必要时这样做)。这是因为该数据的获取过于频繁,导致性能问题。
Django 1.6,Python 2.7。
问题
我可以询问我们手动缓存的字段,并且internal_is_cached(instance, 'fieldname')无需运行查询。但是,我无法对ForeignKey字段执行此操作。
假设我在 Django 中有一个模型类,Foo如下所示:
class Foo(models.Model):
bar = models.ForeignKey('BarModel')
Run Code Online (Sandbox Code Playgroud)
问题
Foo如果我从某处获取模型的实例,但我不知道是否bar曾经调用过它,或者是否已急切地获取它,我如何确定读取instance.bar是否会查询数据库?
换句话说,我想从外部确定任意模型是否具有针对给定的内部缓存ForeignKey,而关于该模型的状态或来源的其他知识为零。
我尝试过的
我尝试使用 Django 缓存进行模型缓存来解决该问题。相关数据的获取过于频繁,以至于对我们的缓存系统造成了不可持续的负载。
我从这个问题尝试了各种解决方案。它们适用于修改后的模型,但似乎不适用于尚未突变的模型——我对模型的“延迟加载”状态感兴趣,而不是“待修改”状态。其中许多解决方案也不适用,因为它们需要更改模型继承或行为,我希望尽可能避免这种情况(政治)。
这个问题看起来很有希望,但它需要控制模型的初始读者过程。我的代码接收到的模型对象可以来自任何地方。
_default_manager模型对象的内部方法,众所周知,这对于我们在生产中的一些(高度定制的)模型对象来说是不准确的字段引用。其中一些非常奇怪,如果可能的话,我更愿意坚持使用记录的(或者至少是稳定的并且不经常被绕过的)API。我在软件中使用 Firebird 数据库并发现了一个问题
\n\n我有两张桌子,适合两种不同类型的客户:
\n\nclientM(\n\n rfcM varchar(12) primary key\n\n some other data \n\n)\n\nclientF(\n\n rfcF varchar(13) primary key\n\n some other data\n\n)\nRun Code Online (Sandbox Code Playgroud)\n\n(长度是固定的,因为它是 M\xc3\xa9xico 中我期望用户输入的数据的标准)
\n\n问题来了,我需要创建第三个表:
\n\nclientPayment(\n\n rfcClient varchar(13)\n\n some other data\n\n)\nRun Code Online (Sandbox Code Playgroud)\n\n并且该字段必须有一个引用 clientM.rfcM 和 clientF.rfcF 的外键,因此我可以使用同一个表来存储来自两种类型客户的付款
\n\n我可以让第三个表不带外键,但希望添加一个并避免用户输入不正确的数据
\n我是学习 SQL 的初学者,在实现这个概念时遇到了麻烦。
假设您创建了以下三个表:
CREATE TABLE dogOwner(
ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk1 PRIMARY KEY,
ownerName VARCHAR(10)
);
CREATE TABLE catOwner(
ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk2 PRIMARY KEY,
ownerName VARCHAR(10)
);
CREATE TABLE petsAdopted(
petNo VARCHAR(8) CONSTRAINT petNo_pk PRIMARY KEY,
ownerNo VARCHAR(8) CONSTRAINT ownerNo_fk1 REFERENCES dogOwner(ownerNo)
CONSTRAINT ownerNo_fk2 REFERENCES catOwner(ownerNo)
);
Run Code Online (Sandbox Code Playgroud)
你如何正确地为外键 ownerNo 创建约束,它从另外两个表中引用 ownerNo?
我陷入了一个问题,我必须找到使用mysql的表之间关系的基数.关注这篇文章
MySQL:如何以编程方式确定外键关系?
我找到了与我的表和外键相关的所有表.现在我也想找到关系的基数,即一对一,一对多或多对多.任何想法或片段都将受到高度赞赏
我试着用谷歌搜索找到这个,但我找不到它们之间的比较。如果有人能告诉我将是一个很大的帮助。
\'\'尝试在外键字段中插入带有 a 的值时出现错误。
我使用 PostgreSQL v10。
\n我的sql代码:
\nCREATE TABLE meas_name (\n nopol varchar(2) NOT NULL,\n cchim varchar(10) NOT NULL,\n ncon varchar(30) NOT NULL,\n PRIMARY KEY (nopol)\n);\n\nCREATE TABLE main_device (\n ntypapp smallint NOT NULL,\n no_main smallint NOT NULL,\n lib_main varchar(25),\n nopol varchar(2),\n no_chrono smallint,\n PRIMARY KEY (no_main,ntypapp)\n);\n\nALTER TABLE main_device ADD CONSTRAINT fk_maindevice_measname FOREIGN KEY (nopol) REFERENCES meas_name(nopol) ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE;\n \nRun Code Online (Sandbox Code Playgroud)\n当我用已知的设备插入测量的东西时,出现此错误:
\ninsert into main_device values \n(1, 1, \'TST LASER\',\'\',1578)\n\nERROR: …Run Code Online (Sandbox Code Playgroud) 一切运行良好。结束部分给出ORA-02291错误。不确定是什么导致了该错误,因为我认为所有代码都运行良好。这是在 Oracle SQL developer 中制作的,错误消息是 ORA-02291。我希望有人能给我一个答案。请帮我。
代码:
CREATE TABLE comm_customer
(
Customer_Id int NOT NULL,
Customer_Name VARCHAR(50) NOT NULL,
Address VARCHAR(255) NOT NULL,
Billing_Address VARCHAR(255) NOT NULL,
city VARCHAR(255) NOT NULL,
country VARCHAR(255) NOT NULL,
phone INT NOT NULL,
primary key(Customer_id)
);
CREATE TABLE comm_orders
(
order_Id INT NOT NULL,
Customer_id INT NOT NULL,
order_date DATE NOT NULL,
amount DECIMAL(5,2) NOT NULL,
Order_status VARCHAR(20) NOT NULL,
primary key(order_id),
FOREIGN KEY (customer_id ) REFERENCES comm_customer(customer_id)
);
CREATE TABLE comm_products …Run Code Online (Sandbox Code Playgroud) 我的问题是我有一个外键列表及其添加日期,如下所示:
+----------------+---------------+
| Foreign Key | Date |
+----------------+---------------+
| 4 | 2022-05-25 |
| 5 | 2022-05-30 |
| 4 | 2022-05-30 |
+----------------+---------------+
Run Code Online (Sandbox Code Playgroud)
我要求的是只显示最早的日期,所以我不想要第二个“4”,因为它是在第一个日期之后创建的。有没有办法可以只显示每个键的最早日期?像这样:
+----------------+---------------+
| Foreign Key | Date |
+----------------+---------------+
| 4 | 2022-05-25 |
| 5 | 2022-05-30 |
+----------------+---------------+
Run Code Online (Sandbox Code Playgroud) 我有一个名为MemberColumn Name的表Member_Id。
该表被超过23个其他表称为主表和Member_Id外部列。
现在,这23个表也具有主键,有些还可以用作其他表的主表。
所以我想获取所有依赖于Table的依赖表的外键Member。
我的目标是截断Member具有外键的表。我不能使用Delete,因为这些表包含更多数据,因此删除数据可能需要花费一些时间。
例如:-
会员->会员编号
Member-Contact与连接Member表使用Member_ID,主键Contact_No
Member_Population与连接Member表使用Member_ID,主键population_seq_no
... 23更多
这些Member-Contact,Member_Population23多了也有与其他表的外键依赖的表。
因此,在截断之前,我需要先删除所有外键,然后截断所有这些从属表,然后还原这些外键。
直到现在,我编写了此查询,该查询可获取一个表的所有外键
SELECT ROW_NUMBER() Over(Order BY f.parent_object_id) as RowID,
OBJECT_NAME(f.parent_object_id) TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName,
f.name as FKConstraintName,
COL_NAME(fc.referenced_object_id,fc.referenced_column_id) as ReferenceColName
--INTO #temp_ReferenceContstraints
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
WHERE OBJECT_NAME (f.referenced_object_id) …Run Code Online (Sandbox Code Playgroud) foreign-keys ×13
sql ×7
database ×2
django ×2
laravel ×2
mysql ×2
oracle ×2
postgresql ×2
python ×2
activerecord ×1
caching ×1
cardinality ×1
constraints ×1
ddl ×1
firebird ×1
laravel-5 ×1
orm ×1
primary-key ×1
relationship ×1
ruby ×1
sql-server ×1
truncate ×1