父类SQLAlchemy中的UniqueConstraint - python

我正在尝试以另一种方式在Flask-SQLAlchemy的父类中添加唯一约束。
如您所见,继承是用联接表的方式重新设置的。

class Parametric(object, Model):
  __tablename__ = "parametric"
  __mapper_args__ = {'polymorphic_on': type,
                     'polymorphic_identity': 'Parametric'}
  __table_args__ = (
         db.UniqueConstraint('name', 'type', name='name_type'),
     )
  id = Column(db.Integer, primary_key=True)
  name = Column(db.String(32), nullable=False)
  type = Column(db.String(50)) 

  def __init__(self, name):
   self.name = name


class Bar(Parametric):        
  __tablename__ = "bar"
  __mapper_args__ = {'polymorphic_identity': 'Foo'}
  prop = Column(db.String(32), nullable=False)
  id = db.Column(db.Integer, db.ForeignKey('parametric.id'), primary_key=True)

  def __init__(self, name, prop):
   super(Parametric, self).__init__(name=name)
   self.prop = prop

当解释器读取第一个孩子时,我得到下一个回溯:

  File "/usr/local/lib/python2.7/dist-packages/Flask_SQLAlchemy-1.0-py2.7.egg/flask_sqlalchemy/__init__.py", line 510, in __init__
    DeclarativeMeta.__init__(self, name, bases, d)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/ext/declarative/api.py", line 53, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/ext/declarative/base.py", line 251, in _as_declarative
    **table_kw)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 352, in __new__
    table._init(name, metadata, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 429, in _init
    self._init_items(*args)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 72, in _init_items
    item._set_parent_with_dispatch(self)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/base.py", line 421, in _set_parent_with_dispatch
    self._set_parent(parent)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 2272, in _set_parent
    ColumnCollectionMixin._set_parent(self, table)
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 2240, in _set_parent
    col = table.c[col]
  File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/util/_collections.py", line 156, in __getitem__
    return self._data[key]
KeyError: 'name'

有什么办法吗?我的代码有什么问题吗?

参考方案

在SQLAlchemy中,您可以使用unique=True参数指定一个唯一的列。我认为这将是一种首选的,更易读的处理方式。

我认为您的问题与继承有关,可能与语法有关。

在您的Parametic的__init__()函数中,您具有name。请注意,name是arg,而不是kwarg。无需使用name=name,只需提交名称,如下所示:

super(Parametric, self).__init__(name)

flask sqlalchemy-根据数据库中的列动态生成数据模型 - python

有没有一种方法可以根据Flask SQLAlchemy的数据库表中的列动态生成数据库模型?我有一个应用程序来显示数据库表中的数据,但是列名有时会更改并破坏我的应用程序。我希望有一种方法可以根据数据库中的实际列名动态​​生成数据模型。我目前明确声明所有列,如下所示。class MyDbModel(db.Model): __tablename__ = '…

Flask_SQLAlchemy无法像SQLAlchemy那样反映数据库 - python

我正在尝试使用python-Flask将Foreigner Database连接到Flask_SQLALchemy应用我到处都看过,包括FLASK_SQLALCHEMY official doc 过去4天里,我一直在Internet上到处寻找FLASK_SQLALCHEMY中没有ORM库的任何教程,但运气不佳我一直在查看SQLAlchemy Reflecti…

SQLalchemy数据库列应采用哪种模型来包含数据数组? - python

因此,我正在尝试建立一个数据库,该数据库的行将经常修改。例如,每小时,我想向数据库的特定部分添加一个数字。因此,如果将self.checkmarks输入等于3的数据库,最好的方法是用增加的数字更新数据库的此部分以使self.checkmarks现在等于3, 2?我尝试将列建立为db.Array,但出现属性错误: AttributeError:“ SQLAlc…

插入带有复合主键的模型时发生IntegrityError - python

我试图用复合主键创建一个表。它具有一个整数和两个字符串字段作为键。当我提交会话时,它会引发一个IntegrityError。我在做什么错了?class Targets(db.Model): __tablename__ = 'Targets' id = db.Column(db.Integer, primary_key=True) Even…

Python / Flask-如何在响应中返回有效的JSON而不是字符串? - python

我正在使用Flask Restful创建一个简单的API,该API在get Response中返回JSON。我所有的方法都很好,我的问题是响应结果中的细节,因为JSON实际上是以字符串形式出现的,我不知道该怎么做。当我用json.dumps()转换python dict时会发生问题我尝试不使用json.dumps()方法来执行此操作,并且我的结果采用所需的格…