저는 SqlAlchemy를 사용하여 Flask에서 일대일 관계를 만들려고합니다. 나는이 이전 post을 따라 나는 아래 것과 같은 클래스를 생성 :Flask의 일대일 관계
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)
더 명확히하기 : 문제는 관계 이미지 및 blindmap과 관련이 있습니다. 내 일대일 관계가 정확하지 않으며 그 오류가 발생합니다. 나는 일대일 관계를 창출하기위한 문제 또는 올바른 방법이 무엇인지 알고 싶습니다.
당신은 당신이 그들을 만들 때 모델로 ID-값을 전달할 필요가 없습니다. 데이터베이스가 생성합니다. – msvalkon