Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以列表形式检索PostgreSQL枚举值的flask sqlalchemy_Python_Flask_Enums_Flask Sqlalchemy - Fatal编程技术网

Python 以列表形式检索PostgreSQL枚举值的flask sqlalchemy

Python 以列表形式检索PostgreSQL枚举值的flask sqlalchemy,python,flask,enums,flask-sqlalchemy,Python,Flask,Enums,Flask Sqlalchemy,我在使用sqlalchemy时有最奇怪的行为,我有一个用户模型,我有一个枚举,用户角色为userrole,它有以下值('vendor','vendor\u admin','admin','collector','retailer'),奇怪的是,每当我查询用户时,除了管理员之外,所有角色都是字符串,因为某种原因,它是一个列表,值为管理员 我已经删除了数据库,并从头开始重新迁移了所有内容 这是我的用户型号: from app import db, ma from marshmallow_enum i

我在使用
sqlalchemy
时有最奇怪的行为,我有一个
用户
模型,我有一个枚举,用户角色为
userrole
,它有以下值
('vendor','vendor\u admin','admin','collector','retailer')
,奇怪的是,每当我查询用户时,除了
管理员
之外,所有角色都是字符串,因为某种原因,它是一个
列表
,值为
管理员

我已经删除了数据库,并从头开始重新迁移了所有内容

这是我的
用户
型号:

from app import db, ma
from marshmallow_enum import EnumField
import enum
import bcrypt


class UserRoleEnum(enum.Enum):
    admin = 'admin',
    collector = 'collector'
    retailer = 'retailer'
    vendor = 'vendor'
    vendor_admin = 'vendor_admin'


class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(), nullable=False)
    mobile = db.Column(db.String(), nullable=False, unique=True)
    username = db.Column(db.String(), unique=True, nullable=False)
    password = db.Column(db.TEXT(), nullable=False)
    is_active = db.Column(db.Boolean(), default=False)
    role = db.Column(db.Enum(UserRoleEnum), nullable=False)
    created_on = db.Column(db.DateTime, server_default=db.func.now())
    updated_on = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())

    # relations

    #related fields
    organization_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=True)
    invoices = db.relationship('Invoice', backref='user')

    def __init__(
            self,
            name,
            username,
            mobile,
            password,
            role,
            is_active,
            organization_id = None
    ):
        self.name = name
        self.username = username
        self.mobile = mobile
        self.role = role
        self.is_active = is_active
        self.organization_id = organization_id
        self.password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode()

    def __repr__(self):
        return "<id %s>" % self.id


class UserSchema(ma.SQLAlchemyAutoSchema):
    role = EnumField(UserRoleEnum, by_value=True)
    class Meta:
        exclude = ['password']
        model = User
        load_instance = True
以下是终端的一个示例:

>>> user = User.query.get(1)
>>> user.role.value
('admin',)
>>> user = User.query.get(2)
>>> user.role.value
'vendor_admin'

后面有一个逗号,所以admin值是一个元组

class UserRoleEnum(enum.Enum):
    admin = 'admin',

删除它,一切都会好起来

因为后面有一个逗号,所以admin值是一个元组

class UserRoleEnum(enum.Enum):
    admin = 'admin',

删除它,一切都会好起来

谢谢,没有注意到排印谢谢,没有注意到排印注意到我们更喜欢这里的技术风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,闲聊的材料和缩写的txtspk,恳求,你被困多久了,投票建议,元评论等。只需解释你的问题,并展示你已经尝试了什么,你期望什么,以及实际发生的情况。请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,闲聊的材料和缩写的txtspk,恳求,你被困多久了,投票建议,元评论等。只需解释你的问题,并展示你已经尝试了什么,你期望什么,实际上发生了什么。