### 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:PASSWORD@127.0.0.1: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 sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to