避免使用Flask在SQlAlchemy中有2个相同的条目

时间:2019-04-30 03:27:43

标签: python-3.x flask flask-sqlalchemy flask-wtforms

我需要找到一种方法来提醒用户,他所介绍的内容已经存在于数据库中,我有一个Flask应用程序和一个SQLAlchemy数据库,我也在使用Flask-WTF, 我尝试了一个非常不稳定的解决方案:我将表单捕获的数据存储在变量中,并且我正在考虑将它们连接起来,并使用查询来搜索它们是否存在。

nombre1 = form.nombre_primero.data
nombre2 = form.nombre_segundo.data

无论如何,我认为这不是处理情况的最合适方法。

Flask有某种方法可以做到这一点吗?还是您会推荐我一些东西? 如果您能帮助我,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

我将通过创建由sqlalchemy模型中的select字段构成的复合唯一约束来解决此问题。

可以通过__table_args__ class property of the declarative base另外配置表。

from app import db
from sqlalchemy import UniqueConstraint

class Role(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nombre_primero = db.Column(db.String(64))
    nombre_segundo = db.Column(db.String(64))

    __table_args__ = (
      UniqueConstraint('nombre_primero', 'nombre_segundo', name='uix_1'),
      )

您可以将数据写入表中,并处理发生冲突时引发的异常。

答案 1 :(得分:0)

好的,因此有一种简单的方法可以解决此问题,在表本身上,您将根据所定义的某种条件创建一个拒绝重复条目的条件。

因此,实现此目的的一种简单方法是设置混合函数。 在此处阅读有关Hybrid Attributes的更多信息。 from sqlalchemy.ext.hybrid import hybrid_property

现在为表格创建模型, 例如:

class xyz(db.Model):
  __tablename__ = 'xyz'
  #tablevalues defined here

  @hybrid_property
  def xyz()
    #make a method here which rejects duplicate entries.

阅读文档后,您将了解其工作原理。 我无法直接解决您的问题,因为您没有提供太多信息。但是通过这种方式,您可以检查条目,并使某些方法变得容易,以便您可以根据需要检查数据是否唯一。