我正在尝试以另一种方式在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()方法来执行此操作,并且我的结果采用所需的格…