Files
web2py/applications/examples/models/database_examples/db.py
2011-11-23 16:35:10 -06:00

73 lines
1.9 KiB
Python

#########################################################################
## This scaffolding model makes your app work on Google App Engine too
#########################################################################
if request.controller.endswith('_examples'): response.generic_patterns.append('*')
from gluon.settings import settings
# if running on Google App Engine
if settings.web2py_runtime_gae:
from gluon.contrib.gql import *
# connect to Google BigTable
db = DAL('gae')
# and store sessions there
session.connect(request, response, db=db)
else:
# if not, use SQLite or other DB
db = DAL('sqlite://storage.sqlite')
db.define_table(
'person',
Field('name'),
Field('email'),
format = '%(name)s',
singular = 'Person',
plural = 'Persons',
)
# ONE (person) TO MANY (dogs)
db.define_table(
'dog',
Field('owner_id', db.person),
Field('name'),
Field('type'),
Field('vaccinated', 'boolean', default=False),
Field('picture', 'upload', default=''),
format = '%(name)s',
singular = 'Dog',
plural = 'Dogs',
)
db.define_table(
'product',
Field('name'),
Field('description', 'text'),
format = '%(name)s',
singular = 'Product',
plural = 'Products',
)
# MANY (persons) TO MANY (purchases)
db.define_table(
'purchase',
Field('buyer_id', db.person),
Field('product_id', db.product),
Field('quantity', 'integer'),
format = '%(quantity)s %(product_id)s -> %(buyer_id)s',
singular = 'Purchase',
plural = 'Purchases',
)
purchased = \
(db.person.id==db.purchase.buyer_id)&\
(db.product.id==db.purchase.product_id)
db.person.name.requires = IS_NOT_EMPTY()
db.person.email.requires = [IS_EMAIL(), IS_NOT_IN_DB(db, 'person.email')]
db.dog.name.requires = IS_NOT_EMPTY()
db.dog.type.requires = IS_IN_SET(('small', 'medium', 'large'))
db.purchase.quantity.requires = IS_INT_IN_RANGE(0, 10)