### 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
WHERE report.id = 1
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
WHERE 1 = comment.report_id ORDER BY comment.id
2011-11-09 13:30:24 EET LOG: statement: INSERT INTO comment (content,
report_id, user_id) VALUES ('test comment', 1, 1) RETURNING comment.id
2011-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
WHERE report.id = 1
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.id
2011-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.id
2011-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
engine =
create_engine('postgresql+psycopg2://USER:[email protected]:5432/test',
echo=True)
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.id
2011-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}
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/sqlalchemy/-/9eqftGEmX-wJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.