since your AccountActivity does have an actual relationship to the Account
table, then yes, to go totally ORM would imply that youd have a relation
on the Account mapping.

  mapper(Account, accounts, properties={
       'activity':relation(AccountActivity, lazy=True)
    }
  )
  mapper(AccountActivity, accountactivity)

when you create a relation as above, it gets a default "cascade" rule of
"save-update", which indicates that the "save" operation on the parent
Account object will result automatically in a "save" operation on the
child AccountActivity object.

if you have potentially many AccountActivity objects for a particular
Account, and you would like to be able to append AccountActivity instances
without forcing a load of all the other objects, you can specify
"lazy=None" on the relationship, which means the relationship will never
automatically load its contents.


James Tauber wrote:
>
> I have a table for user accounts[1] and another one[2] for logging
> all account activity (signup, activation, login, logout, etc)
>
> Not surprisingly, the account activity table has a foreign key of
> account id relating it to the account table.
>
> I have an Account class defined:
>
> class Account(object):
>
>      def __init__(self, email_address, full_name, password):
>          self.email_address = email_address
>          self.full_name = full_name
>          self.password_sha = sha.sha(password).hexdigest()
>
> which is mapped to the table with:
>
> accounts_mapper = mapper(Account, accounts)
>
> So I can create new accounts easily with:
>
> new_account = Account("[EMAIL PROTECTED]", "James Tauber",
> "mypassword")
> session.save(new_account)
> session.flush()
>
> However, I'm wondering the best way to log the account creation (i.e.
> signup). I can do it after the fact with something like:
>
> activity = AccountActivity()
> activity.account_id = new_account.account_id
> activity.time_stamp = time.time()
> activity.activity_type = "SIGNUP"
> session.save(activity)
> session.flush()
>
>
> but I'm just wondering if there's a good way I can do it as part of
> the Account creation itself.
>
> I have done this sort of thing previously in PostgreSQL with triggers
> but I'd like a more DB-neutral approach (that will also work with
> sqlite) using SQLAlchemy.
>
> Any tips?
>
> Would a better approach be to add a property:
>
> accounts_mapper.add_property("activity", relation(AccountActivity))
>
> and then just do a self.activity.append(AccountActivity(...))?
>
>
>
> James
>
>
> [1]
>
> accounts = Table("accounts", meta,
>      Column("account_id", Integer, primary_key = True),
>      Column("email_address", String(255), unique = True, nullable =
> False),
>      Column("full_name", String(255)),
>      Column("password_sha", String(40), nullable = False),
>      Column("status", String(6), default = "NEW", nullable = False),
> # NEW, ACTIVE, LOCKED
> )
>
>
> [2]
>
> account_activity = Table("account_activity", meta,
>      Column("account_activity_id", Integer, primary_key = True),
>      Column("account_id", Integer, ForeignKey("accounts.account_id"),
> nullable = False),
>      Column("time_stamp", DateTime, nullable = False),
>      Column("activity_type", String(8), nullable = False), # SIGNUP,
> ACTIVATE, RESET, LOGIN, LOGOUT
> )
>
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job
> easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Sqlalchemy-users mailing list
> Sqlalchemy-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users
>


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to