SQL, lite lite lite

Aaron Brady castironpi at gmail.com
Mon Dec 29 13:06:56 EST 2008


Hi all,

About a year ago, I posted an idea I was having about thread
synchronization to the newsgroup.  However, I did not explain it well,
and I really erred on the side of brevity.  (After some finagling, Mr.
Bieber and I decided it wasn't exactly anything groundbreaking.)  But
I think the brevity cost me some readers, who might have had more
interest.  The affair was on the whole discouraging.  So, I'm going to
try another idea, and assume that readers have some time, and will
spend it on it.

I don't think relational data can be read and written very easily in
Python.  There are some options, such as 'sqllite3', but they are not
easy.  'sqllite3' statements are valid SQL expressions, which afford
the entire power of SQL, but contrary to its name, it is not that
'lite'.  To me, 'lite' is something you could learn (even make!) in an
afternoon, not a semester; something the size of an ActiveState
recipe, or a little bigger, maybe a file or two.  If you think SQL is
a breeze, you probably won't find my idea exciting.  I assume that the
basics of SQL are creating tables, selecting records, and updating
records.

My idea is to create a 'Relation' class.  The details are basically
open, such as whether to back it with 'sqllite3', 'shelve', 'mmap', or
just mapping and sequence objects; what the simplest syntax is that
can capture and permit all the basics, and how much and what else can
fit in at that level; how and whether it can include arbitrary Python
objects, and what constraints there are on them if not; how and
whether to permit transactions; and what the simplest and coolest
thing you can do with a little Python syntax is.

This is basically an invitation for everyone to brainstorm.  (No
hijackings, good humor & digression ok.)  Lastly, ...

**warning, spoiler!  here's what I thought of already.**

**repeat!  spoiler!  here's what I thought of already.**

#Just the select and update syntax:

>>> a= people._select( "firstname== 'Joe'" )
#select 'key' from 'people' where 'firstname'== 'joe'
>>> a
[Entry2864, Entry3076, Entry3172]
>>> entry1= a[ 0 ]
>>> entry1.phone
#select 'phone' from 'people' where 'key'==self.key
"555-2413"
>>> entry1.phone= "555-1234"
#update 'people' set 'phone'= '555-1234' where 'key'==self.key
>>> entry1.phone
"555-1234"

#Create table syntax (a-whole-nother beast in itself):

>>> classes= db.Relation( 'class_', 'person', Unique( 'class_', 'person' ) )
#create table 'classes' ( 'key', 'class_', 'person' ) unique
( 'class_', 'person' )
>>> classes._unique( 'class_', 'person' )
>>> classes.class_.noneok= False #'class_' cannot be null
>>> classes.person.noneok= False
>>> classes._insert( 'Physics', 'Dan' )
>>> classes._insert( 'Chem', 'Tim' )

Hoping-"good critic"-is-self-consistent-ly, hoping-to-hear-it's-too-
complicated-already-ly,
A. Brady



More information about the Python-list mailing list