Mysql
 sql >> база данни >  >> RDS >> Mysql

slqlalchemy UniqueConstraint VS Index(unique=True)

Основната разлика е, че докато Индекс API позволява дефиниране на индекс извън дефиницията на таблица, стига да може да препраща към таблицата чрез предадените SQL конструкции, UniqueConstraint и ограничения като цяло трябва да бъде дефиниран на линия в дефиницията на таблицата :

Нещото, което трябва да разберете, е, че по време на изграждането на декларативен клас се появява нова Таблица се конструира, ако не е предадено изрично __table__ . Във вашия примерен клас на модела UniqueConstraint екземплярът е свързан с атрибут на клас, но декларативната база не включва ограничения в създадената таблица екземпляр от атрибути. Трябва да го предадете в аргументите на таблицата:

class MyTable(DeclBase):
    __tablename__ = 'my_table'
    ...
    # A positional argument tuple, passed to Table constructor
    __table_args__ = (
        UniqueConstraint(attr_2, attr_3, name='my_table_uidx'),
    )

Имайте предвид, че трябва да предадете името на ограничението като аргумент за ключова дума. Можете също да предадете ограничението, като използвате Table.append_constraint() , ако е извикан преди опити за създаване на таблицата:

class MyTable(DeclBase):
    ...

MyTable.__table__.append_constraint(
    UniqueConstraint('attr_2', 'attr_3', name='my_table_uidx'))



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запазване на параграф от текст в mysql

  2. SQL:избиране на редове, където стойността на колоната е променена от предишния ред

  3. Каква е семантичната разлика между WHERE и HAVING?

  4. Има ли смисъл да използвате LIMIT в заявка EXISTS?

  5. Как да получа данни от база данни за преглед на страница в laravel?