### TEST 1 STATEMENTS
2011-11-09 13:30:24 EET LOG: statement: BEGIN
2011-11-09 13:30:24 EET LOG: statement: SELECT
report.id AS report_id, report.content AS report_content, report.comments_count AS report_comments_count, report.user_id AS report_user_id
FROM report
2011-11-09 13:30:24 EET LOG: statement: SELECT
users.id AS users_id, users.username AS users_username
FROM users
WHERE users.username = 'sector119'
2011-11-09 13:30:24 EET LOG: statement: SELECT
comment.id AS comment_id, comment.content AS comment_content, comment.report_id AS comment_report_id, comment.user_id AS comment_user_id
FROM comment
2011-11-09 13:30:24 EET LOG: statement: INSERT INTO comment (content, report_id, user_id) VALUES ('test comment', 1, 1) RETURNING
comment.id2011-11-09 13:30:24 EET LOG: statement: COMMIT
### TEST 2 STATEMENTS
2011-11-09 13:30:24 EET LOG: statement: BEGIN
2011-11-09 13:30:24 EET LOG: statement: SELECT
report.id AS report_id, report.content AS report_content, report.comments_count AS report_comments_count, report.user_id AS report_user_id
FROM report
2011-11-09 13:30:24 EET LOG: statement: SELECT
users.id AS users_id, users.username AS users_username
FROM users
WHERE users.username = 'sector119'
2011-11-09 13:30:24 EET LOG: statement: INSERT INTO comment (content, report_id, user_id) VALUES ('test comment', NULL, 1) RETURNING
comment.id2011-11-09 13:30:24 EET ERROR: null value in column "report_id" violates not-null constraint
2011-11-09 13:30:24 EET STATEMENT: INSERT INTO comment (content, report_id, user_id) VALUES ('test comment', NULL, 1) RETURNING
comment.id2011-11-09 13:30:24 EET LOG: statement: ROLLBACK
### TEST CASE
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey
from sqlalchemy import Integer, String, UnicodeText
from sqlalchemy import event
from sqlalchemy.orm import relationship
Session = sessionmaker()
Base = declarative_base()
Session.configure(bind=engine)
Base.metadata.bind = engine
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(255), unique=True, nullable=False)
class Comment(Base):
__tablename__ = 'comment'
id = Column(Integer, primary_key=True)
content = Column(UnicodeText, nullable=False)
report_id = Column(Integer, ForeignKey('
report.id'), nullable=False)
user_id = Column(Integer, ForeignKey('
users.id'), nullable=False)
user = relationship('User', backref='comments')
class Report(Base):
__tablename__ = 'report'
id = Column(Integer, primary_key=True)
content = Column(UnicodeText, nullable=False)
comments_count = Column(Integer, server_default='0', nullable=False)
user_id = Column(Integer, ForeignKey('
users.id'), nullable=False)
user = relationship('User', backref='reports')
comments = relationship('Comment', backref='report', cascade='all, delete-orphan', order_by='Comment.id')
Base.metadata.create_all(engine)
session = Session()
user = User(username='sector119')
session.add(user)
session.flush()
session.commit()
session.close()
session = Session()
user = session.query(User).filter_by(username='sector119').one()
report = Report(content=u'test report', user=user)
session.add(report)
session.flush()
session.commit()
session.close()
session = Session()
### TEST 1
report = session.query(Report).get(1)
user = session.query(User).filter_by(username='sector119').one()
comment = Comment(content=u'test comment', user_id=
user.id)
report.comments.append(comment)
session.add(report)
session.flush()
session.commit()
session.close()
### TEST 2
# HERE I GOT ERROR if I uncomment "user = ..." line
session = Session()
report = session.query(Report).get(1)
#user = session.query(User).filter_by(username='sector119').one()
comment = Comment(content=u'test comment', user=user)
report.comments.append(comment)
session.add(report)
session.flush()
session.commit()
session.close()
2011-11-09 13:22:10,270 INFO sqlalchemy.engine.base.Engine INSERT INTO comment (content, report_id, user_id) VALUES (%(content)s, %(report_id)s, %(user_id)s) RETURNING
comment.id2011-11-09 13:22:10,270 INFO sqlalchemy.engine.base.Engine {'content': u'test comment', 'user_id': 1, 'report_id': None}
2011-11-09 13:22:10,270 INFO sqlalchemy.engine.base.Engine ROLLBACK
Traceback (most recent call last):
File "test_append.py", line 92, in <module>
report.comments.append(comment)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/attributes.py", line 168, in __get__
return self.impl.get(instance_state(instance),dict_)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/attributes.py", line 453, in get
value = self.callable_(state, passive)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/strategies.py", line 563, in _load_for_state
result = q.all()
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/query.py", line 1922, in all
return list(self)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/query.py", line 2031, in __iter__
self.session._autoflush()
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/session.py", line 973, in _autoflush
self.flush()
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/session.py", line 1547, in flush
self._flush(objects)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/session.py", line 1616, in _flush
flush_context.execute()
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/unitofwork.py", line 328, in execute
rec.execute(self)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/unitofwork.py", line 472, in execute
uow
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/orm/mapper.py", line 2221, in _save_obj
execute(statement, params)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/engine/base.py", line 1399, in execute
params)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/engine/base.py", line 1532, in _execute_clauseelement
compiled_sql, distilled_params
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/engine/base.py", line 1640, in _execute_context
context)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/engine/base.py", line 1633, in _execute_context
context)
File "/home/eps/devel/tourclub/sqlalchemy/lib/sqlalchemy/engine/default.py", line 330, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (IntegrityError) null value in column "report_id" violates not-null constraint
'INSERT INTO comment (content, report_id, user_id) VALUES (%(content)s, %(report_id)s, %(user_id)s) RETURNING
comment.id' {'content': u'test comment', 'user_id': 1, 'report_id': None}