我正在尝试将表的id字段更改为uuid
这是我的代码:
class AddUuidToProjects < ActiveRecord::Migration[5.0]
def up
add_column :projects, :uuid, :string, limit:36, null: false, first: true
add_column :projects, :old_id, :integer
Project.all.each do |p|
p.update!(old_id: p.id)
end
change_table :projects do |t|
t.remove :id
t.rename :uuid, :id
end
execute "ALTER TABLE projects ADD PRIMARY KEY (id);"
Project.all.each do |p|
# has_one image
Image.find(p.old_id).update!(project: p)
# has_many stories
Story.where(project_id: p.old_id).each do |s|
s.update!(project: p)
end
end
end
...
end
Run Code Online (Sandbox Code Playgroud)
t.remove :id由于外键约束,此迁移在尝试时中断。错误信息是:
Mysql2::Error: Cannot drop column 'id': needed in …Run Code Online (Sandbox Code Playgroud) mysql ruby-on-rails foreign-keys rails-migrations ruby-on-rails-5
我正在学习 python 和 sqlalchemy,并对商店和语言环境之间的关系进行建模。我收到错误:
InvalidRequestError:一个或多个映射器初始化失败 - 无法继续初始化其他映射器。触发映射器:'Mapper|Shop|shop'。原始异常是:Mapper 'Mapper|Locale|locale' 没有属性 'shop'
当我尝试从数据库检索语言时。
from sqlalchemy import Column, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
class Shop(maria.Base):
__tablename__ = 'shop'
__table_args__ = {'extend_existing': True }
name = Column(String(25), primary_key=True)
locale = Column(String, ForeignKey('locale.country'), primary_key=True)
url = Column(String, nullable=False)
country = relationship("Locale", back_populates='shop')
def __repr__(self):
return "{\n\tname:'%s',\n\tlocale:'%s',\n\turl:'%s'\n}" % (self.name, self.locale, self.url)
class Locale(maria.Base):
__tablename__ = 'locale'
__table_args__ = {'extend_existing': True}
country = Column(String(50), primary_key=True)
code = Column(String(11), primary_key=True)
def __repr__(self):
return "{\n\tcountry:'%s',\n\tcode:'%s'\n}" % (self.country, …Run Code Online (Sandbox Code Playgroud) 我想在两个数据库之间创建外键。碰巧这些表有数据,所以当我制作外关系时,出现了错误。
我发现当您的表有数据时会发生错误。那么如何不验证现有数据呢?
ALTER TABLE [contrato_sigob].[relacion_institucion_categoria]
ADD CONSTRAINT CHECK_CATEGORIA
CHECK([dbo].[func_CHECK_CATEGORIA](id_categoria)=1);
Run Code Online (Sandbox Code Playgroud)
错误说:
The ALTER TABLE statement conflicted with the CHECK constraint "CHECK_CATEGORIA". The conflict occurred in database "SIGOB_Contraloria", table "contrato_sigob.relacion_institucion_categoria", column 'id_categoria'.
Run Code Online (Sandbox Code Playgroud) 我有 3 个不同的序列化器,用于父对象和子对象的 3 个不同视图。意见是CreateAPIView,,ListAPIView。RetrieveAPIView
因此,我CreateAPIView有一个用于创建对象的序列化器,ListAPIView有一个用于列出对象的序列化器,还有RetrieveAPIView一个用于显示对象的详细信息的序列化器。对于子对象和父对象都是如此。
如何列出父对象中与其相关的所有子对象?这意味着RetrieveAPIView我想在父级中展示ListAPIView 其子级。
楷模:
class Boards(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=False, null=False, unique=True)
slug = models.SlugField()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Boards, self).save(*args, **kwargs)
class Lists(models.Model):
name = models.CharField(max_length=50, blank=False, null=False, unique=True)
slug = models.SlugField()
board = models.ForeignKey(Boards, on_delete=models.CASCADE)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Lists, …Run Code Online (Sandbox Code Playgroud) foreign-keys django-generic-views django-serializer django-rest-framework
假设我有来自两个不同表的两个对象,分别称为Student、 和School。该Student表存储了该表的外键School,因此是多对一的关系。例如:
Student Obj (pk = 251)
- school_pk = 24 (Attribute can be null)
School Obj (pk = 24)
Run Code Online (Sandbox Code Playgroud)
School现在,如果我删除主键为 24 的对象会发生什么?主键为 251 的对象Student在删除过程中是否也被更新,使其属性school_pk被设置为null?
我有一个与这里发布的问题类似的问题: Entity Framework Code First - Twoforeign Keys from same table,但是它非常旧,不适用于 Core,我无法得到适合我的建议。
基本上,我正在尝试创建一个固定表,其中有两个指向团队表的外键。一场比赛由主队和客队组成。拥有可为空的字段不是一种选择。
考虑一场有两支球队的比赛。
public class Fixture
{
public int Id { get; set; }
public Team HomeTeam { get; set; }
public int HomeTeamId { get; set; }
public Team AwayTeam { get; set; }
public int AwayTeamId { get; set; }
public virtual Team HomeTeam { get; set; }
public virtual Team AwayTeam { get; set; }
}
public class Team
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id …Run Code Online (Sandbox Code Playgroud) 该数据库将存储有关硬件设备及其收集的数据的信息。我创建了一个设备表来存储可用的硬件设备:
CREATE TABLE IF NOT EXISTS `devices` (
`deviceID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`deviceType` int(10) unsigned NOT NULL,
`updateFrequency` int(10) unsigned NOT NULL,
PRIMARY KEY (`deviceID`,`deviceType`)
)
Run Code Online (Sandbox Code Playgroud)
deviceID 将对应于真实的硬件 ID(从 1 到 12)。由于有两种类型的硬件设备,我认为创建一个 deviceType 是合适的,该 deviceType 为 0 或 1,具体取决于哪个硬件设备并创建一个复合主键。
为了存储该数据,我创建了另一个表。
CREATE TABLE IF NOT EXISTS `data` (
`dataID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`deviceID` int(11) unsigned NOT NULL,
`payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`dataID`),
KEY `fk_data_devices` (`deviceID`),
CONSTRAINT `fk_data_devices`
FOREIGN KEY (`deviceID`) …Run Code Online (Sandbox Code Playgroud) 我想知道这两个 SQL 语句之间是否有任何(可能是细微的)差异:
CREATE TABLE profiles (
profile_id SERIAL PRIMARY KEY NOT NULL,
bio TEXT,
user_id INTEGER NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
Run Code Online (Sandbox Code Playgroud)
和
CREATE TABLE profiles (
profile_id SERIAL PRIMARY KEY NOT NULL,
bio TEXT,
user_id INTEGER NOT NULL REFERENCES users(user_id)
);
Run Code Online (Sandbox Code Playgroud)
我注意到,当我在 Postico 中使用第一个表示法创建表时,但profiles稍后查看创建的表的 DDL,它FOREIGN KEY被删除,最终得到较短的第二个表示法。
创建表FOREIGN KEY:

DDL 视图不显示FOREIGN KEY:

因此,我想知道(并寻求确认)这两个语句实际上 100% 等效,或者它们对数据库的作用是否存在一些细微的差异。
任何指向官方资源的指针(也许还有它与 MySQL 的不同之处)将不胜感激。
我使用 TypeORM (v0.2.18) 和 Node.js (v12.7.0) 在 SQLite 数据库中执行迁移。
这是我的情况:我有一个名为 的表country和一个名为 的表workflow。我想删除其中一列名为 的列name,country但通过该列进行workflow引用country。
使用 SQLite 的 DB Browser,我可以使用以下语句成功删除该列:
PRAGMA foreign_keys=OFF;
CREATE TEMPORARY TABLE country_backup(id, createdAt, updatedAt, enabled, codeIso2);
INSERT INTO country_backup SELECT id, createdAt, updatedAt, enabled, codeIso2 FROM country;
DROP TABLE country;
CREATE TABLE country(id, createdAt, updatedAt, enabled, codeIso2);
INSERT INTO country SELECT id, createdAt, updatedAt, enabled, codeIso2 FROM country_backup;
DROP TABLE country_backup;
PRAGMA foreign_keys=ON;
Run Code Online (Sandbox Code Playgroud)
我在 TypeORM 迁移中使用了它,如下所示: …
我正在尝试使用几个相关模型构建一个示例,如下所示。我们有一个模型 B 与模型 C 具有 1:n 关系;那么我们就有一个模型 A,与 B 具有 1 关系,与 C 具有 1 关系。(C 有 2 列主键)
我尝试了这段代码:
class C(db.Model):
__tablename__ = 'C'
key1 = Column(Integer, primary_key=True)
key2 = Column(Integer, primary_key=True)
attr1 = Column(Date)
attr2 = Column(Boolean)
related_b = Column(Integer, ForeignKey('B.spam'))
class B(db.Model):
__tablename__ = 'B'
spam = Column(Integer, default=1, primary_key=True)
eggs = Column(String, default='eggs')
null = Column(String)
n_relation = relationship(C, foreign_keys='C.related_b')
class A(db.Model):
__tablename__ = 'A'
foo = Column(String, default='foo', primary_key=True)
bar = Column(String, default='bar', primary_key=True)
baz …Run Code Online (Sandbox Code Playgroud) foreign-keys ×10
sql ×3
database ×2
mysql ×2
python ×2
sqlalchemy ×2
asp.net-mvc ×1
mariadb ×1
orm ×1
postgresql ×1
relationship ×1
sql-server ×1
sqlite ×1
typeorm ×1