Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 如何使用flask_sqlalchemy定义'ENUM'字段?_Python_Mysql_Flask - Fatal编程技术网

Python 如何使用flask_sqlalchemy定义'ENUM'字段?

Python 如何使用flask_sqlalchemy定义'ENUM'字段?,python,mysql,flask,Python,Mysql,Flask,这是我的密码: from flask import Flask from flask_sqlalchemy import SQLAlchemy import enum app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root1234@localhost/kaka_db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True db = SQLAlc

这是我的密码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import enum

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root1234@localhost/kaka_db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
db = SQLAlchemy(app)

class UserType(enum.Enum):
    puTongUser      = 0
    guanLiYuan      = 1
    superGuanLiYuan = 2
    changJia        = 3

class User(db.Model):
    __talbename__ = 'user_table'
    id          = db.Column(db.Integer, primary_key=True, autoincrement=True)
    userName    = db.Column(db.String(80), unique=True, nullable=False)
    passWord    = db.Column(db.String(80), nullable=False)
    phone       = db.Column(db.String(80))
    email       = db.Column(db.String(80), unique=True)
    userType    = db.Column(db.Enum(UserType))
    code        = db.Column(db.String(80), unique=True)
    pushToken   = db.Column(db.String(80))
    token       = db.Column(db.String(80))
    regiserType = db.Column(db.Integer, unique=True)
    userMoney   = db.Column(db.Float)

    def __init__(self, username, password, phone = None, email = None, code = None, pushToken = None, userType = 0, registerType = 0, userMoney = 0.0):
        self.userName = username
        self.passWord = password
        self.phone = phone
        self.email = email
        self.code = code
        self.pushToken = pushToken
        self.userType = userType
        self.regiserType = registerType
        self.userMoney = userMoney

db.create_all()
db.session.commit()


if __name__ == '__main__':
    app.run(debug = True)
运行时遇到以下错误:

Traceback (most recent call last):
  File "C:\Users\elqstux\workspace\Kaka\server.py", line 41, in <module>
    db.create_all()
  File "C:\Python27\lib\site-packages\flask_sqlalchemy\__init__.py", line 972, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Python27\lib\site-packages\flask_sqlalchemy\__init__.py", line 964, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\schema.py", line 3745, in create_all
    tables=tables)
  File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1856, in _run_visitor
    conn._run_visitor(visitorcallable, element, **kwargs)
  File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1481, in _run_visitor
    **kwargs).traverse_single(element)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\visitors.py", line 121, in traverse_single
    return meth(obj, **kw)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\ddl.py", line 720, in visit_metadata
    _ddl_runner=self)
  File "C:\Python27\lib\site-packages\sqlalchemy\event\attr.py", line 256, in __call__
    fn(*args, **kw)
  File "C:\Python27\lib\site-packages\sqlalchemy\util\langhelpers.py", line 546, in __call__
    return getattr(self.target, self.name)(*arg, **kw)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\sqltypes.py", line 1038, in _on_metadata_create
    t = self.dialect_impl(bind.dialect)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\type_api.py", line 361, in dialect_impl
    return self._dialect_info(dialect)['impl']
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\type_api.py", line 403, in _dialect_info
    impl = self._gen_dialect_impl(dialect)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\type_api.py", line 412, in _gen_dialect_impl
    return dialect.type_descriptor(self)
  File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line 359, in type_descriptor
    return sqltypes.adapt_type(typeobj, self.colspecs)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\type_api.py", line 1186, in adapt_type
    return typeobj.adapt(impltype)
  File "C:\Python27\lib\site-packages\sqlalchemy\sql\sqltypes.py", line 1181, in adapt
    **kw)
  File "C:\Python27\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1486, in __init__
    values, length = self._init_values(enums, kw)
  File "C:\Python27\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1401, in _init_values
    q = e[0]
  File "C:\Python27\lib\site-packages\enum\__init__.py", line 393, in __getitem__
    return cls._member_map_[name]
KeyError: 0
回溯(最近一次呼叫最后一次):
文件“C:\Users\elqstux\workspace\Kaka\server.py”,第41行,在
db.create_all()
文件“C:\Python27\lib\site packages\flask\u sqlalchemy\\uuuu init\uuuu.py”,第972行,在create\u all中
self.\u为所有表执行(应用程序、绑定、“创建所有表”)
文件“C:\Python27\lib\site packages\flask\u sqlalchemy\\uuuuu init\uuuuuuuuu.py”,第964行,在所有表的执行中
op(绑定=自身获取引擎(应用,绑定),**额外)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\schema.py”,第3745行,在create\u all中
表=表)
文件“C:\Python27\lib\site packages\sqlalchemy\engine\base.py”,第1856行,在\u run\u visitor中
连接运行访问者(访问者可调用,元素,**kwargs)
文件“C:\Python27\lib\site packages\sqlalchemy\engine\base.py”,第1481行,在\u run\u visitor中
**kwargs)。单导线(元件)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\visitors.py”,第121行,在traverse\u single中
返回方法(obj,**kw)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\ddl.py”,第720行,在visit\U元数据中
_ddl_runner=self)
文件“C:\Python27\lib\site packages\sqlalchemy\event\attr.py”,第256行,在调用中__
fn(*参数,**千瓦)
文件“C:\Python27\lib\site packages\sqlalchemy\util\langhelpers.py”,第546行,在调用中__
返回getattr(self.target,self.name)(*arg,**kw)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\sqltypes.py”,第1038行,位于元数据创建中
t=自身方言\u impl(绑定方言)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\type\u api.py”,第361行,方言\u impl
返回自我。方言信息(方言)['impl']
文件“C:\Python27\lib\site packages\sqlalchemy\sql\type\u api.py”,第403行,在\u方言\u信息中
impl=self.\u gen\u方言\u impl(方言)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\type\u api.py”,第412行,以\u gen\u方言\u impl
返回方言。类型_描述符(self)
文件“C:\Python27\lib\site packages\sqlalchemy\engine\default.py”,第359行,在类型描述符中
返回sqltypes.adapt_类型(typeobj、self.colspecs)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\type\u api.py”,第1186行,采用自适应类型
返回类型对象自适应(impltype)
文件“C:\Python27\lib\site packages\sqlalchemy\sql\sqltypes.py”,第1181行,在adapt中
**千瓦)
文件“C:\Python27\lib\site packages\sqlalchemy\dialogs\mysql\base.py”,第1486行,在\uuu init中__
值,长度=self.\u初始值(枚举,千瓦)
文件“C:\Python27\lib\site packages\sqlalchemy\dialogs\mysql\base.py”,第1401行,在_init_值中
q=e[0]
文件“C:\Python27\lib\site packages\enum\\uuuuu init\uuuuuu.py”,第393行,在\uuuu getitem中__
返回cls.\u成员\u映射\u[名称]
关键错误:0

根据文档,如果在子模型中有重复的属性名称,则属性将有重复的列

例如,如果您这样做模型,它将使用联接继承,因为没有命名冲突,并且SQLAlchemy不必将两列映射到一个属性中:

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    type = db.Column(db.String(50))

    __mapper_args__ = {
        'polymorphic_identity': 'base',
        'polymorphic_on': type
    }

class Child(Parent):
    __tablename__ = 'child'
    child_id = db.Column(db.Integer, db.ForeignKey('parent.id'), primary_key=True)
    text = db.Column(db.String(50))

    __mapper_args__ = {
        'polymorphic_identity': 'child',
    }
并将此视图用于子模型,以防止“type”字段在窗体中公开 类PolyModel(sqlamodel.ModelView): 排除的列=('type',)

有了具体的继承,它就可以毫无问题地工作了

我可能会考虑如何处理多列ID,但目前无法提供任何估计


希望有帮助。

你能试试这个类的UserType(enum.enum):puTongUser=“puTongUser”guanLiYuan=“guanLiYuan”superGuanLiYuan=“superGuanLiYuan”changJia=“changJia”