sqlite 如何使用typeorm向现有实体添加新列

1cosmwyk  于 2023-08-06  发布在  SQLite
关注(0)|答案(2)|浏览(224)

我开始研究typeorm,我很困惑,如果我向一个已经用数据持久化的现有实体添加一个新列,会发生什么。我用的是SQLite。
我在文档中看到,在“迁移”部分,如果我想添加一个新列,似乎必须完成一个过程。
但是当我看到this issue in typeorm's github时,我明白了,如果我只是将新的“@Column”注解属性添加到Entity类就足够了,并且typeorm将在应用程序启动时自动创建列。
我真的希望typeorm能够自动处理模式更改。
有人能帮忙吗?

rqqzpn5f

rqqzpn5f1#

TypeOrm能够更改模式,但不会在服务器启动时自动运行迁移(这不是想要的行为)。如果您希望在应用程序启动时执行迁移,则需要执行以下步骤:
1.创建迁移文件:
更改实体(如添加新列)后,您需要生成一个迁移文件:

typeorm migration:generate -c 'connectionName'

字符串
然后将该迁移文件创建到ormconfig.json中配置的文件夹中。
1.运行迁移
在启动服务器之前,需要创建数据库连接并运行迁移。所以你的主文件应该是这样的

import { Connection, getConnectionManager } from 'typeorm';

const connectionManager = getConnectionManager();
const connection = connectionManager.get(connectionName);
await connection.runMigrations();

// start your server
startServer();


出于开发目的,您还可以使用模式同步,在这种情况下,typeorm将您的数据库与您的实体同步:

npx typeorm schema:sync -c 'connectionName'

6ss1mwsb

6ss1mwsb2#

我必须创建新的迁移,这将在表用户中的“password”和“created_at”列之间添加新列“is_delete”
我创建了新的迁移文件。在public async up中,我插入了:

await queryRunner.query(`ALTER TABLE \`users\` ADD \`is_delete\` int NOT NULL DEFAULT '0' AFTER \`password\` `);

字符串
也许对某人会有用

相关问题