Re: help creating sqlalchemy/sqlsoup code for sql query

Mary Jane Boholst <[email protected]> Tue, 10 Oct 2006 15:57:29 +0100
Newsgroups gmane.comp.python.spyce.general
Organization IOP
Message-ID <[email protected]>
When I add the id column to the table which I am displaying, the rows have the 
correct id associated with them, however when I try to delete a row the first 
row displayed is deleted. 
I attach the relevant code. If anyone could shed light on what is going on and 
what I am doing wrong I will be very grateful.
Thanks again.
MJ


On Tuesday 10 October 2006 15:10, Jonathan Ellis wrote:
> Somehow you are not using your loop correctly and everything is getting
> the same id.
>
> On Tue, 10 Oct 2006 11:45:31 +0100, "Mary Jane Boholst"
>
> <[email protected]> said:
> > Thanks for this. It seems that the handler was not getting executed.
> > This is fixed now. However, I have discovered a problem with my delete
> > and update handlers. The handlers are being called however the incorrect
> > entry is deleted. I am trying to as you can probably guess allow certain
> > users to update, delete or insert items to a database. In an attempt to
> > allow certain rows of the table to be deleted or updated I have created
> > delete and update buttons. The handlers do not work as intended which is
> > down to the id variable. The id variable is taken from the database and
> > is intended to be used to identify the row to update or delete. However
> > printing the id value reveals that the id of the uppermost row in the
> > table is being used rather than the id of the row from which the button
> > is pressed.
> > Could anyone explain why this is so? Does any one have an idea how I
> > could use this id variable to delete or update all the rows of the table
> > rather than just the uppermost row in the table? Or even just a way in
> > which I can allow the update and deletion of certain rows in a table?
> > I am not sure if what I have just said makes sense, but any help would
> > be useful.
> > Thanks in advance.
> > Regards,
> > MJ
> >
> > Jonathan Ellis wrote:
> > > Well, the first step is to make sure the handler is actually getting
> > > executed.  Put a print statement in there to check.
> > >
> > > -J
> > >
> > > On Fri, 06 Oct 2006 16:22:33 +0100, "Mary Jane Boholst"
> > >
> > > <[email protected]> said:
> > >> Thank you very much for this very helpful piece of code.
> > >> I have another question. (Last one for the week, promise!) I am trying
> > >> to create a button on a page which inserts values from a form into a
> > >> database. I have defined my handler and created the button but the
> > >> data does not seem to be committed to the database. I do not get any
> > >> error messages but checking the database for the data shows that it
> > >> has not been inserted.
> > >> The code for my handler is:
> > >> [[!
> > >>     def insertentry(self,
> > >> api,day,course,timeslottype,start,end,title,tutor):
> > >>
> > >> api.db.timetable.insert(day=day,course=course,timeslottype=timeslottyp
> > >>e,starttime=start,endtime=end,title=title,givenbby=tutor)
> > >> api.db.flush()
> > >> ]]
> > >>
> > >> The code for the button is:
> > >> <f:submit handler=self.insertentry value="Insert entry" />
> > >>  From reading around it seems that this should work. Is there
> > >> something I am missing?
> > >> Thanks in advance for all help.
> > >> MJ
> > >>
> > >> Jonathan Ellis wrote:
> > >>> from sqlalchemy import or_
> > >>> where = or_(db.timetable.c.course=='LAA',
> > >>> db.timetable.c.course=='COM') db.timetable.select(where,
> > >>> order_by=[db.timetable.c.day,
> > >>> db.timetable.c.starttime])
> > >>>
> > >>> On Wed, 4 Oct 2006 11:50:07 +0100, "Mary Jane Boholst"
> > >>>
> > >>> <[email protected]> said:
> > >>>> Hi again,
> > >>>> Another question which should be fairly simple to answer. I am
> > >>>> trying to carry
> > >>>> out a fairly word query within my spyce code and am not sure how to
> > >>>> do it.
> > >>>> The sql that I want to translate to sqlalchemy is select * from
> > >>>> timetable where course='LAA' or course='COM' order by day,
> > >>>> starttime. I have tried several times to do this but I get errors
> > >>>> trying to do both the
> > >>>> order by and the where clauses.
> > >>>> Any help will be gratefully received.
> > >>>> Thank you all for your help and suggestions. The login token problem
> > >>>> is now
> > >>>> fixed and I have at the moment decided to use the example on the
> > >>>> spyce pages
> > >>>> to help with the displaying of different pages for different users.
> > >>>> Thanks again,
> > >>>> MJ
> > >>>>
> > >>>> --------------------------------------------------------------------
> > >>>>----- Take Surveys. Earn Cash. Influence the Future of IT
> > >>>> Join SourceForge.net's Techsay panel and you'll get the chance to
> > >>>> share your
> > >>>> opinions on IT & business topics through brief surveys -- and earn
> > >>>> cash
> > >>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=D
> > >>>>EVDEV _______________________________________________
> > >>>> Spyce-users mailing list
> > >>>> [email protected]
> > >>>> https://lists.sourceforge.net/lists/listinfo/spyce-users
> > >>
> > >> ----------------------------------------------------------------------
> > >>--- Take Surveys. Earn Cash. Influence the Future of IT
> > >> Join SourceForge.net's Techsay panel and you'll get the chance to
> > >> share your
> > >> opinions on IT & business topics through brief surveys -- and earn
> > >> cash
> > >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEV
> > >>DEV _______________________________________________
> > >> Spyce-users mailing list
> > >> [email protected]
> > >> https://lists.sourceforge.net/lists/listinfo/spyce-users
> >
> > -------------------------------------------------------------------------
> > Take Surveys. Earn Cash. Influence the Future of IT
> > Join SourceForge.net's Techsay panel and you'll get the chance to share
> > your
> > opinions on IT & business topics through brief surveys -- and earn cash
> > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> > _______________________________________________
> > Spyce-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/spyce-users

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV

_______________________________________________
Spyce-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spyce-users
action.py (application/x-python, 692 B)
from spyceConfig import db

def delete(api, item_id):
	remove = api.db.timetable.selectone_by(id=item_id)
	api.db.delete(remove)
	api.db.flush()
	


def update(api, item_id, day, course, start, end, title, tutor):
	api.db.timetable.update(db.timetable.c.id==item_id, day=day, course=course, starttime=start, endtime=end, title=title, givenby=tutor)
	api.db.flush()
	

def new_entry(api, day, course, timeslottype, start, end, title, tutor):
	api.db.timetable.insert(day=day, course=course, timeslottype=timeslottype, starttime=start, endtime=end, infourl='', title=title, givenby=tutor, tutorinfo='')
	api.db.flush()
	
	
def home(api):
	api.redirect.external('index.spy')
	api.response.end()
index.spy (text/plain, 6.2 KB)
<spy:parent title="Edit Summer School Timetable" />
[[.import name=redirect]]
[[!
	def insert(self, api):
		api.redirect.external('insert.spy')
		api.response.end()
]]

[[from sqlalchemy import or_]]

<f:form>
 <spy:login_required />
[[ current_user = db.users.selectone_by(username=request.login_id()) ]]
  <b>Welcome [[= current_user.username]]</b></br>
  <spy:logout /></br>

</br>

[[course=current_user.username]]
[[--print course--]]
[[if course == 'laa': {]]
[[coursename= 'Linkage and Association']]
<h2><center>Edit Summer School [[=coursename]] Timetable</center></h2>
[[where=or_(db.timetable.c.course=='LAA',db.timetable.c.course=='COM')]]
[[ lists = db.timetable.select(where,order_by=[db.timetable.c.day,db.timetable.c.starttime]) ]]
[[--print lists--]]
<table align=center>
<tr>
  [[--<th>ID</th>--]]
  <th>Day</th>
  <th>Course</th>
  <th>Start</th>
  <th>End</th>
  <th>Title</th>
  <th>Tutor</th>
 </tr>
[[r=0]]
[[for c in lists: {]]
<tr>
<f:hidden name="item_id" value="=lists[r].id" />
<td><f:text name="item_id" value="=lists[r].id" size =4 /></td>
<td><f:text name="day" value="=lists[r].day" size =2 /></td>
<td><f:text name="course" value="=lists[r].course" size =5 /></td>
<td><f:text name="start" value="=lists[r].starttime" size =5 /></td>
<td><f:text name="end" value="=lists[r].endtime" size =5 /></td>
<td><f:text name="title" value="=lists[r].title" size =80 /></td>
<td><f:text name="tutor" value="=lists[r].givenby" size =30 /></td>
<td><f:submit handler=action.delete value="Delete Entry" /></td>
<td><f:submit handler=action.update value="Update Entry" /></td> 

</tr>
[[r=r+1]]
[[}]]
</table>
[[}]]
[[elif course=='tmf': {]]
[[coursename= 'Twin Model Fitting']]
<h2><center>Edit Summer School [[=coursename]] Timetable</center></h2>
[[where=or_(db.timetable.c.course=='TMF',db.timetable.c.course=='COM')]]
[[ lists = db.timetable.select(where,order_by=[db.timetable.c.day,db.timetable.c.starttime]) ]]
[[--print lists--]]
<table align=center>
<tr>
  [[--<th>ID</th>--]]
  <th>Day</th>
  <th>Course</th>
  <th>Start</th>
  <th>End</th>
  <th>Title</th>
  <th>Tutor</th>
 </tr>
[[r=0]]
[[for c in lists: {]]
<tr>
<f:hidden name="item_id" value="=lists[r].id" />
<td><f:text name="item_id" value="=lists[r].id" size =4 /></td>
<td><f:text name="day" value="=lists[r].day" size =2 /></td>
<td><f:text name="course" value="=lists[r].course" size =5 /></td>
<td><f:text name="start" value="=lists[r].starttime" size =5 /></td>
<td><f:text name="end" value="=lists[r].endtime" size =5 /></td>
<td><f:text name="title" value="=lists[r].title" size =80 /></td>
<td><f:text name="tutor" value="=lists[r].givenby" size =30 /></td>
<td><f:submit handler=action.delete value="Delete Entry" /></td>
<td><f:submit handler=action.update value="Update Entry" /></td> 

</tr>
[[r=r+1]]
[[}]]
</table>
[[}]]
[[elif course=='mge': {]]
[[coursename= 'Microarray and Gene Expression']]
<h2><center>Edit Summer School [[=coursename]] Timetable</center></h2>
[[where=or_(db.timetable.c.course=='MGE',db.timetable.c.course=='COM')]]
[[ lists = db.timetable.select(where,order_by=[db.timetable.c.day,db.timetable.c.starttime]) ]]
[[--print lists--]]
<table align=center>
<tr>
  [[--<th>ID</th>--]]
  <th>Day</th>
  <th>Course</th>
  <th>Start</th>
  <th>End</th>
  <th>Title</th>
  <th>Tutor</th>
 </tr>
[[r=0]]
[[for c in lists: {]]
<tr>
<f:hidden name="item_id" value="=lists[r].id" />
<td><f:text name="item_id" value="=lists[r].id" size =4 /></td>
<td><f:text name="day" value="=lists[r].day" size =2 /></td>
<td><f:text name="course" value="=lists[r].course" size =5 /></td>
<td><f:text name="start" value="=lists[r].starttime" size =5 /></td>
<td><f:text name="end" value="=lists[r].endtime" size =5 /></td>
<td><f:text name="title" value="=lists[r].title" size =80 /></td>
<td><f:text name="tutor" value="=lists[r].givenby" size =30 /></td>
<td><f:submit handler=action.delete value="Delete Entry" /></td>
<td><f:submit handler=action.update value="Update Entry" /></td>

</tr>
[[r=r+1]]
[[}]]
</table>
[[}]]
[[elif course=='com': {]]
[[coursename= 'Common Components']]
<h2><center>Edit Summer School [[=coursename]] Timetable</center></h2>
[[ lists = db.timetable.select(db.timetable.c.course=='COM',order_by=[db.timetable.c.day,db.timetable.c.starttime]) ]]
[[--print lists--]]
<table align=center>
<tr>
  [[--<th>ID</th>--]]
  <th>Day</th>
  <th>Course</th>
  <th>Start</th>
  <th>End</th>
  <th>Title</th>
  <th>Tutor</th>
 </tr>
[[r=0]]
[[for c in lists: {]]
<tr>
<f:hidden name="item_id" value="=lists[r].id" />
<td><f:text name="item_id" value="=lists[r].id" size =4 /></td>
<td><f:text name="day" value="=lists[r].day" size =2 /></td>
<td><f:text name="course" value="=lists[r].course" size =5 /></td>
<td><f:text name="start" value="=lists[r].starttime" size =5 /></td>
<td><f:text name="end" value="=lists[r].endtime" size =5 /></td>
<td><f:text name="title" value="=lists[r].title" size =80 /></td>
<td><f:text name="tutor" value="=lists[r].givenby" size =30 /></td>
<td><f:submit handler=action.delete value="Delete Entry" /></td>
<td><f:submit handler=action.update value="Update Entry" /></td> 

</tr>
[[r=r+1]]
[[}]]
</table>
[[}]]
[[elif course=='schooladmin': {]]
<table>
<tr><td><f:submit handler=self.insert value="Insert a unit/module" /></td></tr>
</table>
<h2><center>Edit Summer School Timetable</center></h2>

[[ lists = db.timetable.select(order_by=[db.timetable.c.day,db.timetable.c.course,db.timetable.c.starttime]) ]]
<table align=center>
<tr>
  <th>Day</th>
  <th>Course</th>
  <th>Start</th>
  <th>End</th>
  <th>Title</th>
  <th>Tutor</th>
 </tr>
[[r=0]]
[[for c in lists: {]]
<tr>
<f:hidden name="item_id" value="=lists[r].id" />
<td><f:text name="item_id" value="=lists[r].id" size =4 /></td>
<td><f:text name="day" value="=lists[r].day" size =2 /></td>
<td><f:text name="course" value="=lists[r].course" size =5 /></td>
<td><f:text name="start" value="=lists[r].starttime" size =5 /></td>
<td><f:text name="end" value="=lists[r].endtime" size =5 /></td>
<td><f:text name="title" value="=lists[r].title" size =80 /></td>
<td><f:text name="tutor" value="=lists[r].givenby" size =30 /></td>
<td><f:submit handler=action.delete value="Delete Entry" /></td>
<td><f:submit handler=action.update value="Update Entry" /></td> 
</tr>
[[r=r+1]]
[[}]]
</table>
[[}]]

</f:form>