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

问题描述 投票:0回答:2

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

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

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

Flask有办法做到这一点吗?或者你会推荐我什么?如果你能帮助我,我将不胜感激!

python-3.x flask flask-sqlalchemy flask-wtforms
2个回答
1
投票

我将通过创建由sqlalchemy模型中的选择字段组成的复合唯一约束来实现此目的。

该表可以通过__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'),
      )

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


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.

阅读完文档后,您将了解其工作原理。我无法直接解决您的问题,因为您提供的信息不多。但是通过这种方式,您可以检查条目并轻松地使用某种方法检查您的数据,使其无论如何都是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.