def save(self):
        db.update('users',int(self.id),rating=self.rating,
last_name=self.last_name, pageviews=self.pageviews, ip=self.ip,
number_polls=self.number_polls, site=self.site, hotmail=self.hotmail,
number_activities=self.number_activities, skype=self.skype,
city=self.city,rawpassword=self.rawpassword,
number_useraudios=self.number_useraudios, zip=self.zip,
number_votes=self.number_votes,last_login=self.last_login,
number_userpics=self.number_userpics, music=self.music, email=self.email,
number_pages=self.number_pages, number_posts=self.number_posts,
number_comments=self.number_comments,number_pictures=self.number_pictures,
first_name=self.first_name, yahoo=self.yahoo, groups=self.groups,
heroes=self.heroes,favoritestuff=self.favoritestuff,
number_usermessages_sent=self.number_usermessages_sent, vanity=self.vanity,
interests=self.interests,television=self.television,
number_uservideos=self.number_uservideos, dob=self.dob,
gender=self.gender,number_friends=self.number_friends,
liketomeet=self.liketomeet, htmlcodes=self.htmlcodes, aim=self.aim,
movies=self.movies, books=self.books, profilepic=self.profilepic,
number_usermessages=self.number_usermessages,email_subscribe=self.email_subscribe,
number_communities=self.number_communities)

this is user.save()
method
is there any way to figure out which key is changed and update only that key
this seems wasteful and unpythonic

On Wed, May 14, 2008 at 3:35 AM, Hermann Kaser <[EMAIL PROTECTED]>
wrote:

> Doing a query everytime a property of an object changes is highly
> unefficient. I have a user object very similar to yours for a site of
> mine and it works this way:
>
> Constructor recieves the user row from the database (although you
> could make it recieve a user id and pull the info off the database in
> the constructor) and sets all the properties.
> Then you can change the values of the properties accessing them
> directly or if you prefer you can have get/set methods. When you're
> done with the user I have a save method, which just is a update query
> that grabs all the info from the object properties. That way I can do
>
> user_data = web.select('users', where='id=X')
> user = User(user_data)
>
> user.number_comments = user.number_comments + 1
>
> user.save()
>
> On Wed, May 14, 2008 at 12:21 PM, paul jobs <[EMAIL PROTECTED]> wrote:
> > This User object works well
> > Can I now somehow do this
> >
> > if i saw
> > j.number_comments=j.number_comments+1
> >
> > will go to user table and increment the row automatically that ll be
> awesome
> >
> > :)
> > thanks
> >
> >  <api.User instance at 0x94fbc8c>
> > >>> j.
> > j.__class__                 j.hotmail
> j.number_userpics
> > j.__doc__                   j.htmlcodes
> j.number_uservideos
> > j.__init__                  j.id                        j.number_votes
> >  j.__module__                j.interests                 j.pageviews
> > j.aim                       j.ip                        j.password
> > j.books                     j.kissallfriends            j.pokeallfriends
> > j.city                      j.last_login                j.profilepic
> >  j.created                   j.last_name                 j.publishfeed
> > j.dob                       j.liketomeet                j.rating
> > j.email                     j.movies                    j.rawpassword
> > j.email_subscribe           j.music                     j.setlastlogin
> >  j.favoritestuff             j.myrand
>  j.setlastlogin300
> > j.first_name                j.number_activities         j.site
> > j.gender                    j.number_comments           j.skype
> > j.getfeeds                  j.number_communities        j.television
> >  j.getfriends                j.number_friends            j.userid
> > j.getlastloginstr           j.number_pages              j.username
> > >>> j.number_friends
> >
> >
> >
> > On Wed, May 14, 2008 at 1:21 AM, Paul Jobs <[EMAIL PROTECTED]> wrote:
> >
> > >
> > >
> > > class User:
> > > > """user object
> > > > """
> > > >
> > > > def __init__(self, id):
> > > > self._id = id
> > > > self._user=db.query('select * from users where
> > > > id=$id',vars=locals())
> > > > if not self._user:
> > >
> > >         for k in self.user.keys():
> > >             setattr(self,k,self.user[k])
> > >
> > > is there a better way to do this?
> > >
> > >
> > >
> > >
> > > Yoan Blanc wrote:
> > > What you wanna do isn't a dict but that:
> > > http://docs.python.org/ref/attribute-access.html
> > >
> > > -- Yoan
> > >
> > > On Wed, May 14, 2008 at 9:47 AM, Yoan Blanc <[EMAIL PROTECTED]>
> wrote:
> > >
> > >
> > >
> >
> http://www.diveintopython.org/object_oriented_framework/special_class_methods.html
> > >
> > > or be naughty:
> > >
> > > class User(dict):
> > > ...
> > >
> > >
> > >
> > > On Wed, May 14, 2008 at 9:42 AM, Paul Jobs <[EMAIL PROTECTED]>
> wrote:
> > > >
> > > > im trying to create a class user
> > > > so that
> > > >
> > > > i can do
> > > >
> > > > r=User(1)
> > > >
> > > >
> > > > r._user.keys()
> > > > ['rating', 'last_name', 'pageviews', 'ip', 'number_polls', 'site',
> > > > 'myrand', 'hotmail', 'number_activities', 'skype', 'id', 'city',
> > > > 'rawpassword', 'number_useraudios', 'zip', 'number_votes',
> 'last_login',
> > > > 'number_userpics', 'music', 'email', 'number_pages', 'username',
> > > > 'number_posts', 'hash', 'number_comments', 'number_pictures',
> > 'first_name',
> > > > 'yahoo', 'groups', 'heroes', 'favoritestuff',
> > 'number_usermessages_sent',
> > > > 'vanity', 'interests', 'television', 'number_uservideos', 'created',
> > 'dob',
> > > > 'gender', 'number_friends', 'liketomeet', 'htmlcodes', 'aim',
> 'movies',
> > > > 'password', 'books', 'profilepic', 'number_usermessages',
> > 'email_subscribe',
> > > > 'number_communities']
> > > >
> > > > so i want this to become
> > > >
> > > > r.rating
> > > > r.last_name
> > > > r.pageviews and so on
> > > > r.username
> > > > r.photos()
> > > > and so on
> > > >
> > > > but
> > > >
> > > > i want to set the keys of the user row as the keys of User self
> > > > but i m not sure how to do it
> > > >
> > > > for i in self._user.keys():
> > > > self[i]=self._user[i]
> > > >
> > > > gives an error
> > > > Traceback (most recent call last):
> > > > File "<stdin>", line 1, in <module>
> > > > File "api.py", line 40, in __init__
> > > > self[i]=self._user[i]
> > > > AttributeError: teenwag instance has no attribute '__setitem__'
> > > >
> > > > You can do something like
> > > >
> > > > self.update(_user)
> > > >
> > > > doesnt work either
> > > > Traceback (most recent call last):
> > > > File "<stdin>", line 1, in <module>
> > > > File "api.py", line 39, in __init__
> > > > self.update(self._user)
> > > > AttributeError: user instance has no attribute 'update'
> > > >
> > > > Any thoughts on how to set this?
> > > >
> > > > class User:
> > > > """user object
> > > > """
> > > >
> > > > def __init__(self, id):
> > > > self._id = id
> > > > self._user=db.query('select * from users where
> > > > id=$id',vars=locals())
> > > > if not self._user:
> > > > self._validuser=False
> > > > self._username=''
> > > > self._firstname=''
> > > > self._lastname=''
> > > > self._dob=''
> > > > self._gender=''
> > > > self._sex=''
> > > > else:
> > > > self._user=self._user[0]
> > > > self._validuser=True
> > > > self._username=self._user.username
> > > > self._firstname=self._user.first_name
> > > > self._lastname=self._user.last_name
> > > > self._dob=self._user.dob
> > > > self._gender=self._user.gender
> > > > self._sex=self._user.gender
> > > > for i in self._user.keys():
> > > > self[i]=self._user[i]
> > > > def userrow(self):
> > > > return db.query('select * from users where
> > > > id=$self._id',vars=locals())[0]
> > > > def photos(self):
> > > > return db.query('select pic,id, username from userpics where
> > > > user_id=$self._id',vars=locals())
> > > >
> > > >
> > > >
> > > > > >
> > > >
> > >
> > >
> > >
> > >
> >
> >
> >  >
> >
>
>
>
> --
> Hermann Käser
> http://theragingche.com/
> http://semicir.cl/user/hermzz
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web.py" group.
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/webpy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to