gpt4 book ai didi

TypeORM 不创建表、列等

转载 作者:行者123 更新时间:2023-12-04 10:03:06 25 4
gpt4 key购买 nike

我已经建立了一个带有 typeorm ( https://github.com/typeorm/typeorm ) 和 NestJs ( https://github.com/nestjs/nest ) 的系统,但是 TypeORM 没有创建表或列。我的设置是这样的:

import {UserPassword} from '../user/user-password.entity';
import {User} from '../user/user.entity';

createConnection({
type: 'mysql',
host: 'typeorm2.cn32tstd6wqk.eu-central-1.rds.amazonaws.com',
port: 1234,
username: 'username',
password: 'password',
database: 'dbname',
entities: [
// __dirname + '/../**/*.entity{.ts,.js}'
UserPassword,
User
]
})
实体是:
import {Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn} from 'typeorm';

@Entity()
export class UserPassword {

@PrimaryGeneratedColumn()
id: number;

@Column()
hash: string;

@Column()
algorithm: string;

}

import {Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn} from 'typeorm';
import {UserPassword} from './user-password.entity';

@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;

@Column({ length: 35 })
firstName: string;

@Column({ length: 35 })
lastName: string;

@Column({ length: 50})
mail: string;

@OneToOne(type => UserPassword)
@JoinColumn()
password: UserPassword;

}
然后我尝试创建一个这样的用户:
// ... some code
await this.userPasswordRepository.save(userPassword);
return await this.userRepository.save(user);
但我收到以下错误:

QueryFailedError: ER_NO_SUCH_TABLE: Table 'typeorm2.user_password' doesn't exist


当我手动插入表格时,我收到错误:

QueryFailedError: ER_BAD_FIELD_ERROR: Unknown column 'hash' in 'field list'


所以看起来 TypeORM 不会生成表/列。有谁知道为什么会这样?

最佳答案

即使以前的答案对于 来说是可以接受的发展 环境,他们是 生产错误 .
您正在寻找的是迁移。建立连接并记录迁移时执行迁移 - 不会多次运行迁移。 TypeORM 还提供了 CLI,它允许您生成迁移( read more here ),从而使创建它们的速度更快。 TypeORM 还用时间戳前缀标记每个迁移,确保它们以正确的顺序运行 - 有时您可能希望首先在主表中运行迁移,有时在支持表上运行。配置连接时,您可以像这样加载迁移:

createConnection({
type: 'mysql',
host: 'typeorm2.cn32tstd6wqk.eu-central-1.rds.amazonaws.com',
port: 1234,
username: 'username',
password: 'password',
database: 'dbname',
entities: [
// __dirname + '/../**/*.entity{.ts,.js}'
UserPassword,
User
],
migrations: ['./migrations/*.js'],
synchronize: false
})
迁移由两部分组成 - 向上 (迁移代码)和 (恢复迁移的代码)。简单的例子:
import { MigrationInterface, QueryRunner } from 'typeorm';

export class AddImageToUser implements MigrationInterface {

async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(
'ALTER TABLE "user" ADD image varchar(255)'
);
}
async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(
'ALTER TABLE "user" DROP COLUMN image'
);
}
}
如果你想阅读更多,TypeORM 在他们的官方 Git 存储库中有详细说明 here
一般来说,将数据和模式的同步留给框架是不好的。您应该执行此操作以确保保留数据库架构。我之前链接的 CLI 还允许您运行迁移,因此在将更改推送到生产之前对其进行测试。

关于TypeORM 不创建表、列等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46843385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com