如何设置enum将数据库中的值保存为int值、FastAPI和Postgres?

问题描述 投票:0回答:1

所以我尝试建立一个像前提一样保持价值的系统。

  • 管理员=0
  • 编辑=1
  • 观众 = 2

我尝试让模型用户像这样。

#model.py
class User(BaseModel):
    __tablename__ = "users"

    username = Column(String, primary_key=True, index=True)
    password = Column(String)
    permission = Column(Enum(Permission))

我迁移了白酒(autogen)。

def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('users',
    sa.Column('username', sa.String(), nullable=False),
    sa.Column('password', sa.String(), nullable=True),
    sa.Column('permission', sa.Enum('Admin', 'Viewer', name='permission'), nullable=True),

我的枚举

from enum import Enum, IntEnum

class Permission(IntEnum):
    Admin = 0
    Edit = 1
    Viewer = 2

所以我在 postgres 中保存的地方它在这段代码中保存到管理员

#service.py
def create_user_with_admin_permission(db: SessionLocal, username: str, password: str):
    permission_value = Permission.Admin
    #at up this line i try to use Permission.Admin.value but not work
    user = models.User(username=username, password=password, permission=permission_value)
    db.add(user)
    db.commit()
    db.refresh(user)
    return user

enter image description here

你能帮我吗T_T 或者我不确定我是否像此图像一样在字符串上保存值是好方法还是坏方法。 我知道用 int 记录更好。

有东西挡路

postgresql enums fastapi
1个回答
0
投票

好的,现在我通过更改线路来修复

permission = Column(Enum(Permission))

permission = Column(Integer)
© www.soinside.com 2019 - 2024. All rights reserved.