Индивидуальные отношения в колбе

Я пытаюсь создать отношения «один к одному» в Flask, используя SqlAlchemy. Я следил за этой предыдущей записью, и я создал классы, подобные приведенным ниже:

class Image(db.Model): __tablename__ = 'image' image_id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(8)) class Blindmap(db.Model): __tablename__ = 'blindmap' module_id = db.Column(db.Integer, primary_key = True) image_id = db.Column(db.Integer, ForeignKey('image.image_id')) 

Хотя он может мигрировать модель в базу данных sqlite3, у меня есть ошибка, когда я пытаюсь создать один объект, информирующий значение другого класса как image_id. Например:

 image1 = Image(image_id=1, name='image1.png') blindmap1 = Blindmap(module_id=1, image_id=1) 

И ошибка, которая у меня есть, следующая. Я не совсем понимаю, что это за ошибка целостности. Я также попытался вставить сам объект в создание blindmap1, но безуспешно.

 ====================================================================== ERROR: test_commit_blindmap (__main__.TestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "tests.py", line 183, in test_commit_blindmap blindmap1.add_label(label1) File "/home/thiago/Documents/ANU/MEDGg1/MEDG/LAWA/2014/trunk/app/models.py", line 325, in add_label db.session.commit() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/scoping.py", line 150, in do return getattr(self.registry(), name)(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 776, in commit self.transaction.commit() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 377, in commit self._prepare_impl() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 357, in _prepare_impl self.session.flush() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1919, in flush self._flush(objects) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2037, in _flush transaction.rollback(_capture_exception=True) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__ compat.reraise(exc_type, exc_value, exc_tb) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2001, in _flush flush_context.execute() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute rec.execute(self) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 526, in execute uow File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 65, in save_obj mapper, table, insert) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 570, in _emit_insert_statements execute(statement, multiparams) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 729, in execute return meth(self, multiparams, params) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 321, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement compiled_sql, distilled_params File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 958, in _execute_context context) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1160, in _handle_dbapi_exception exc_info File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 951, in _execute_context context) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 436, in do_execute cursor.execute(statement, parameters) IntegrityError: (IntegrityError) UNIQUE constraint failed: blindmap.module_id u'INSERT INTO blindmap (module_id, image_id) VALUES (?, ?)' (1, 1) 

Быть яснее: проблема связана с отношением образа и слепой. Мои отношения «один-к-одному» неверны и приводят меня к этой ошибке. Я хотел бы знать, в чем проблема или правильный способ создания отношений «один к одному».

One Solution collect form web for “Индивидуальные отношения в колбе”

Твоя связь прекрасна. Ваша проблема в том, что вы сами устанавливаете первичные ключи (в частности, module_id в вашем примере).

В сообщении об ошибке четко Blindmap что не так: в вашей базе уже есть Blindmap с module_id = 1 . Поскольку module_id является вашим основным ключом, вы не можете вставить второй.

Вместо того, чтобы пытаться самостоятельно установить первичные и внешние ключи, позвольте SQLAlchemy сделать это для вас, определив правильные отношения.

Например, например: http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#one-to-one :

 class Image(db.Model): __tablename__ = 'image' image_id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(8)) # the one-to-one relation blindmap = relationship("Blindmap", uselist=False, backref="image") class Blindmap(db.Model): __tablename__ = 'blindmap' module_id = db.Column(db.Integer, primary_key = True) image_id = db.Column(db.Integer, ForeignKey('image.image_id')) image1 = Image(name='image1.png') blindmap1 = Blindmap() blindmap1.image = image1 
  • SqlAlchemy: преобразовать унаследованный тип от одного к другому
  • Как сгенерировать файл с DDL в диалоговом окне SQL в SQLAlchemy?
  • Выключить предупреждение в sqlalchemy
  • Как использовать SQLAlchemy отражение с Sybase?
  • Обновление таблицы из другой таблицы с несколькими столбцами в sqlalchemy
  • Переопределение имени таблицы в Flask-Alchemy
  • Подключение к базе данных с помощью SQLAlchemy
  • Как использовать SQLAlchemy для беспрепятственного доступа к нескольким базам данных?
  • Используйте sqlalchemy для выбора только одной строки из связанной таблицы
  • Проблема с SqlAlchemy - «Родительский экземпляр <SomeClass> не привязан к сеансу; ленивая загрузка ... "
  • Результаты двойного счета Postgres + Sqlalchemy
  •  
    Interesting Posts for Van-Lav

    Регулярное выражение Python соответствует тексту в одинарных кавычках, игнорируя экранированные кавычки (и вкладки / новые строки)

    Как я могу массировать параллельные массивы numpy типа «zip sort»?

    Как сохранить захваченное изображение на диск, используя Pygame

    Python Selenium Отправить ключи Предоставление предупреждения о размере

    Нечеткий текстовый поиск python

    Нет вывода на печать из дочерней многопроцессорности. Процесс, если программа не сработает

    pandas – добавить новый столбец в dataframe из словаря

    Python MySql Вставить не работает

    Генерация случайных строк с буквами верхнего регистра и цифрами в Python

    побочный эффект getchas в python / numpy? страшные истории и узкие побеги

    Как написать вывод скрипта в файл и в командной строке?

    Как реализовать минимальный класс, который ведет себя как последовательность в Python?

    Установка модуля python в код

    Стандарты отступов при написании приложения django

    int .__ mul__, выполняется в 2 раза медленнее, чем operator.mul

    Python - лучший язык программирования в мире.