Brent
thanks i m using the storage object now
any thoughts on how to implement the save() method of class user instead of
doing a massive update, is there a pythonic way to set the dirty columns and
save only those using db.update
thanks
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- Hide quoted text -
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 1:15 PM, Brent Pedersen <[EMAIL PROTECTED]> wrote:
>
> "better" is relative. it is less code. (i dont think you need that
> setattr, just do it directly.)
> and i think you'd just use:
> j.keys()
> you wont seem the attrs in the autocompletion because they are dynamic.
> -b
>
> On Wed, May 14, 2008 at 12:41 PM, Paul Jobs <[EMAIL PROTECTED]> wrote:
> >
> > class User(Storage):
> >
> > def __init__(id):
> > self.userrow=db.query('select * from users where id=
> > $self._id',vars=locals())[0]
> > for k in self.userrow.keys():
> > setattr(self,k,self.userrow[k])
> > #self.k=self.userrow[k]
> >
> > both setattra and self.k = self.userrow methods are not working after
> > inheriting from storage
> >
> > >>> j.
> > j.__class__ j.__gt__ j.__repr__
> > j.getliveuserrow j.popitem
> > j.__cmp__ j.__hash__ j.__setattr__ j.getphotos
> > j.publishfeed
> > j.__contains__ j.__init__ j.__setitem__ j.getuserrow
> > j.save
> > j.__delattr__ j.__iter__ j.__str__ j.has_key
> > j.setdefault
> > j.__delitem__ j.__le__ j.__weakref__ j.items
> > j.setlastlogin
> > j.__dict__ j.__len__ j.clear j.iteritems
> > j.setlastlogin300
> > j.__doc__ j.__lt__ j.copy j.iterkeys
> > j.update
> > j.__eq__ j.__module__ j.fromkeys j.itervalues
> > j.values
> > j.__ge__ j.__ne__ j.get j.keys
> > j.__getattr__ j.__new__ j.getfeeds
> > j.kissallfriends
> > j.__getattribute__ j.__reduce__ j.getfriends
> > j.pokeallfriends
> > j.__getitem__ j.__reduce_ex__ j.getlastloginstr j.pop
> >
> >
> > without Storage
> > class User:
> > all the column elements are accessible as j.htmlcodes j.first_name and
> so
> > on
> > 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.save
> > j.favoritestuff j.myrand j.setlastlogin
> > j.first_name j.number_activities
> j.setlastlogin300
> > j.gender j.number_comments j.site
> > j.getfeeds j.number_communities j.skype
> > j.getfriends j.number_friends j.television
> > j.getlastloginstr j.number_pages j.userid
> > j.getliveuserrow j.number_pictures j.username
> > j.getphotos j.number_polls j.userrow
> > j.getuserrow j.number_posts j.validuser
> > j.groups j.number_useraudios j.vanity
> > j.hash j.number_usermessages j.yahoo
> > j.heroes j.number_usermessages_sent j.zip
> >
> >
> > Brent Pedersen wrote:
> > i think you have it all, just have User be inherit from Storage:
> >
> > from web.utils import Storage
> > class User(Storage):
> > def __init__(....)
> >
> > -brent
> >
> >
> >
> > On Wed, May 14, 2008 at 12:45 AM, Paul <[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: 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())
> > >
> >
> >
> >
> >
> >
> > >
> >
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---