Hermann
so effectively, need to find
diff or user and self.objects
and save only those in the db
On Wed, May 14, 2008 at 3:49 AM, paul jobs <[EMAIL PROTECTED]> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---