A number of variables from SQLBuilder are included with from SQLObject import * -- see the relevant SQLObject documentation for more. Its functionality is also available through the special q attribute of SQLObject classes.
SQLBuilder uses clever overriding of operators to make Python expressions build SQL expressions -- so long as you start with a Magic Object that knows how to fake it.
With SQLObject, you get a Magic Object by access the q attribute of a table class -- this gives you an object that represents the field. Maybe explanations aren't as good. Here's some examples:
>>> from SQLBuilder import * >>> person = table.person # person is now equivalent to the Person.q object from the SQLObject # documentation >>> person person >>> person.first_name person.first_name >>> person.first_name == 'John' person.first_name = 'John' >>> name = 'John' >>> person.first_name != name person.first_name <> 'John' >>> AND(person.first_name == 'John', person.last_name == 'Doe') (person.first_name = 'John AND person.last_name = 'Doe')
Most of the operators work properly: <, >, <=, >=, !=, ==, +, -, /, *, **, %. However, and, or, and not do not work. You can use &, |, and ~ instead -- but be aware that these have the same precedence as multiplication. So:
# This isn't what you want: >> person.first_name == 'John' & person.last_name == 'Doe' (person.first_name = ('John' AND person.last_name)) = 'Doe' # This is: >> (person.first_name == 'John') & (person.last_name == 'Doe') ((person.first_name = 'John') AND (person.last_name == 'Doe'))
SQLBuilder also contains the functions AND, OR, and NOT which also work -- I find these easier to work with. AND and OR can take any number of arguments.
You can also use .startswith() and .endswith() on a SQL expression -- these will translate to appropriate LIKE statements (but all % quoting is handled for you, so you can ignore that implementation detail). There is also a LIKE function, where you can pass your string, with % for the wildcard, as usual.
If you want to access a SQL function, use the func variable, like:
>> person.created < func.NOW()
That's it -- enjoy!