Избегайте использования 2 одинаковых записей в SQlAlchemy с использованием Flask - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно найти способ предупредить пользователя о том, что то, что он представляет, уже существует в базе данных, у меня есть приложение Flask и база данных SQLAlchemy, я также использую Flask-WTF, я попытался с очень ненадежным решением:Я хранил данные, захваченные формами, в переменных и думал о том, чтобы объединить их и использовать запрос для поиска, если они существуют.

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

В любом случае, я думаю, что это не самый подходящий способ справиться с ситуацией.

У Flask есть какой-нибудь способ сделать это?Или вы бы порекомендовали мне что-нибудь?Буду признателен, если вы поможете мне!

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Я бы подошел к этому, создав составное уникальное ограничение из полей выбора в модели sqlalchemy.

Таблица может быть дополнительно сконфигурирована через __table_args__ свойство класса декларативной базы .

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 голосов
/ 30 апреля 2019

Хорошо, есть простой способ решить эту проблему: в самой таблице вы создаете условие, которое отклоняет повторяющиеся записи на основе определенного вами условия.

Итак, один простой способ сделать это - создать гибридную функцию.Подробнее о гибридных атрибутах здесь.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.

Когда вы прочитаете документацию, вы поймете, как это работает.Я не могу решить вашу проблему напрямую, потому что вы не предоставили много информации.Но таким образом, вы можете проверить записи и сделать какой-нибудь метод ЛЕГКО, где ваши данные проверяются на уникальность в любом случае вы хотите.

...