【问题标题】:Avoid having 2 identical entries in SQlAlchemy using Flask避免使用 Flask 在 SQLAlchemy 中有 2 个相同的条目
【发布时间】:2019-04-30 03:27:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您没有显示您的模型,但也许将字段设置为唯一可以吗?

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


【解决方案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'),
      )

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

【讨论】:

  • 我没有考虑这个选项,因为表格代表患者及其信息,可能有重复的姓名或姓氏,但它们的组合必须是唯一的,这就是为什么我需要找到一种控制这4个字段name1,name2,surname1,surname2组合的方法
  • 唯一约束是在创建为复合时使用表中复合字段的组合唯一性
【解决方案2】:

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

因此,一种简单的方法是创建一个混合函数。 在此处阅读有关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.

一旦您阅读了文档,您就会明白这是如何工作的。 我无法直接解决您的问题,因为您提供的信息不多。但是通过这种方式,您可以检查条目并轻松地制作一些方法,在其中检查您的数据是否是唯一的,无论您想要什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多