Hi, everyone.

I cannot found information how to find information about new relationships, 
when they related with secondary table.
Inspect can't work with class RelationshipProperty.
     class_mapper.iterate_properties have't information about changed 
attributes

My *task* is:
  Write transactions for all changes, i use them for generate old condition 
of instances
I try to use:
  Write to common table Transcations, data:

classname,
instance_id,
attribute_name,
new_value,
old_value
TransactionsComment - group of transactions (such as *git commit*)

*Example* is:
  users=db.session.query(Group_).first()
  if users is None:
    users=Group_(name='users')
    db.session.add(users)
    db.session.commit()
  print ('now on user')
##New User
  user=db.session.query(User_).first()
  if user is None:
    # print ('need new user')
    user=User_(login='trololo', groups=[users])
    db.session.add(user)
    db.session.commit()
  return 'good'

I use *listener "before_commit"*

#update
  for i in db.session.dirty:
    tr=[]
    print ('\nUpdated   '+i.__class__.__name__+'  '+str(i.__dict__))

    for prop in class_mapper(i.__class__).iterate_properties:
      if isinstance(prop, RelationshipProperty):
        if prop.parent==i.__mapper__:
          print (str(prop.key))
          print ('try to find '+prop.key+' in '+str(i.__dict__))
          if prop.key in i.__dict__:
            print (inspect(i.__dict__[prop.key]))
          # for rel_attr in inspect(prop).attrs:
          #   if rel_attr.history.has_changes:
          #     print (str(rel_attr))

  #create
  for i in db.session.new:
    print ('\nNew   '+i.__class__.__name__+'  '+str(i.__dict__))
    if getattr(i,'Document',False) is not False:
      doc=db.session.query(Document_).first()
      if doc is None:
        doc=Document_(name='test', extension='txt')
      print ('added document property to'+str(i.__dict__))
      i.Document=doc

*Result* is
New   Group_  {'name': 'users', 'polymorphic_type': 'group_', 
'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 
0x7f9854eee630>}
added document property to{'_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee630>, 'name': 
'users', 'mRID': UUID('1c0a2e32-20b9-4ecf-af62-5cf919e16269'), 
'polymorphic_type': 'group_'}
now on user

Updated   Group_  {'_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee630>}
users
try to find users in {'_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee630>}
childrens
try to find childrens in {'_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee630>}
parents
try to find parents in {'_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee630>}

New   User_  {'login': 'trololo', 'groups': True, '_sa_instance_state': 
<sqlalchemy.orm.state.InstanceState object at 0x7f9854eee978>, 
'polymorphic_type': 'user_'}
added document property to{'login': 'trololo', 'groups': True, 
'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 
0x7f9854eee978>, 'mRID': UUID('c07fe890-8bb4-4b36-abe6-afd85148d005'), 
'polymorphic_type': 'user_'}

Thanks for read my answer, if you have minds how i can find this changes, 
or another path to complete this task i would like to read them

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to