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

Я пытаюсь создать отношения «один к одному» в 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 
Interesting Posts

Как упаковать демона Python с помощью setuptools

Ошибка в зазоре в строке в Pandas

Selenium в Python на Mac – исполняемый файл Geckodriver должен находиться в PATH

Динамическая переменная в Python

Python list comprehension – доступ к последнему созданному элементу?

Назначение ячеек двумерной матрицы в Python, без numpy

Дата составления с часовым поясом из электронной почты?

Pimon miminum length / max значение в словаре списков

Файл CSV, написанный на Python, имеет пустые строки между каждой строкой

Экстраполировать Pandas DataFrame

TypeError: индексы списка должны быть целыми числами, а не списком. Как исправить?

Как проверить подлинность с помощью API настроек электронной почты Google, используя учетную запись службы oauth2 Клиент Python?

Использование приложения планировщика Django с вашими собственными моделями

Получение общего количества слов с двумя или более буквами в документе с использованием python

Как я могу автоспецировать насмешливую функцию Сельдерея

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