1.5.5.4 Full Code Listing

###
1.5.5.4 Full Code Listing

Here is a complete code listing so that you can experiment:

    #!/usr/bin/env python

    import sys; sys.path.append('../../../') # show python where the modules are

    import web.database, web.database.object
    connection = web.database.connect(
        adapter="snakesql",
        database="database-object-query",
        autoCreate = 1,
    )
    cursor = connection.cursor()

    import datetime

    person = web.database.object.Table("Person")
    person.addColumn(web.database.object.String(name="firstName"))
    person.addColumn(web.database.object.String(name="surname", unique=True, required=True, key=True))

    queryExample = web.database.object.Table('QueryExample')
    queryExample.addColumn(web.database.object.Date(name="testDate"))
    queryExample.addColumn(web.database.object.Integer(name="testInteger"))
    queryExample.addColumn(web.database.object.Integer(name="testNumber"))
    queryExample.addColumn(web.database.object.Email(name="email"))

    database = web.database.object.Database()
    database.addTable(person)
    database.addTable(queryExample)
    database.init(cursor)

    if not database.tablesExist():
        database.createTables()
        print "Created Table"

    database['Person'].insert(firstName="John", surname="Smith")
    database['Person'].insert(firstName="Owen", surname="Jones")

    database['QueryExample'].insert(
        testDate=datetime.date(2004,7,11),
        testInteger = 10,
        testNumber = 15,
        email = 'james@example.com'
    )

    where = database['Person'].column['firstName'] == "John"
    print where

    rows = database['Person'].select(where=where)
    print rows

    column = database['queryExample'].column

    print column['testDate'] == datetime.date(2003,12,12)
    print column['testInteger'] < 5

    print column.AND(column['email'] == 'james@jimmyg.org', column['testInteger'] < 5)
    print column.NOT(column['email'] == 'james@jimmyg.org')

    print (column['email'] == 'james@jimmyg.org') & (column['testInteger'] < 5)
    print (column['email'] == 'james@jimmyg.org')

    connection.close() # Close the connection without saving changes

The output is:

    Created Table
    (Person.firstName = 'John')
    {'Smith': <web.database.object.Row from Person table, rowid=1, firstName='John', surname='Smith'>}
    (QueryExample.testDate = '2003-12-12')
    (QueryExample.testInteger < 5)
    (QueryExample.email = 'james@jimmyg.org') AND (QueryExample.testInteger < 5)
    NOT (QueryExample.email = 'james@jimmyg.org')
    ((QueryExample.email = 'james@jimmyg.org')  AND  (QueryExample.testInteger < 5))
    ( NOT  (QueryExample.email = 'james@jimmyg.org'))

You will need to delete the database file object-related.db each time you run the cose so that it can be recreated each time.