database persistence with mysql, sqlite

Bryan Olson fakeaddress at nowhere.org
Wed Sep 26 23:24:30 EDT 2007


Lawrence D'Oliveiro wrote:
> In Bryan Olson wrote:
> 
>> coldpizza wrote:
>>> It turned out that the method above ('SELECT * FROM TABLE LIMIT L1,
>>> L2') works ok both with mysql and sqlite3, therefore I have decided to
>>> stick with it until I find something better. With Sqlite3 you are
>>> supposed to use LIMIT 10 OFFSET NN, but it also apparently supports
>>> the mysql syntax (LIMIT NN, 10) for compatibility reasons.

>> A more reliable form is along the lines:
>>
>>      SELECT keyfield, stuff
>>      FROM table
>>      WHERE keyfield > ?
>>      ORDER BY keyfield
>>      LIMIT 10
>>
>> With the right index, it's efficient.
> 
> But that involves keeping track of the right starting keyfield value for the
> next batch of records, which is complicated and nontrivial.

I think you missed the idea here. Recall that we return a
web page showing 10 records and a 'Next' link. We write the
link so that the browser will send back the parameter we
need. If the largest keyfield value on the page is
"Two-Sheds" the link might read:

<A HREF="http://rfh.uk/tablnext.cgi?start=Two-Sheds">Next</A>

The solution is stateless. There's no "keeping track" on the
server side. When we respond to a request, we neither look up
a previous request nor store anything for a future response.


> Simpler to let
> the DBMS do the work for you.

Keeping a cursor with pending data across HTTP requests is
a world of hurt.


-- 
--Bryan



More information about the Python-list mailing list