Home
Features
Quick example
Project's status
Contributors
Installation
Documentation
User's Guide (pdf)
Framework APIs
Modeling
Notification
Downloads
SF Project Page
Mailing list
News
Bugs
Web SVN
Licence
|
A very quick overview
- Design your model
- Write sample_pymodel.py:
#! /usr/bin/env python
from Modeling.PyModel import *
# Defaults
AString.defaults['width'] = 40
Entity.defaults['properties'] = [
APrimaryKey('id', isClassProperty=0, isRequired=1, doc='PK')
]
##
_connDict = {'database': 'SampleDB', 'host': 'localhost',
'user': 'postgres', 'password': ''}
model = Model('Sample',adaptorName='Postgresql', connDict=_connDict)
model.version='0.1'
model.entities = [
Entity('Person',
properties=[ AString('firstName'),
AString('lastName',isRequired=1)] ),
Entity('Address',
properties=[ AString('street'),
AString('zipCode', width=10),
AString('town', isRequired=1) ], ),
]
#---
model.associations=[
Association('Address','Person',
relations=['person','addresses'],
delete=['nullify','deny'] ),
]
- Verify the correctness of your model
- shell> mdl_validate_model.py sample_pymodel.py
(note: use option -h on python scripts for details)
- Generate the python code
- shell> mdl_generate_python_code.py sample_pymodel.py
Note: python modules and classes can also be generated dynamically on the
fly.
If you're interested in such a feature, you want to have a look at
this
patch for details.
- Generate the corresponding database schema
- Either get the coresponding sql statements:
shell> mdl_generate_DB_schema.py -c -C sample_pymodel.py
CREATE TABLE PERSON (
FIRST_NAME VARCHAR(40) ,
LAST_NAME VARCHAR(40) NOT NULL,
ID INTEGER NOT NULL);
CREATE TABLE ADDRESS (
TOWN VARCHAR(40) NOT NULL,
FK_PERSON INTEGER ,
STREET VARCHAR(40) ,
ID INTEGER NOT NULL,
ZIP_CODE VARCHAR(10) );
ALTER TABLE PERSON ADD PRIMARY KEY (ID);
ALTER TABLE ADDRESS ADD PRIMARY KEY (ID);
ALTER TABLE ADDRESS ADD CONSTRAINT person FOREIGN KEY (FK_PERSON) REFERENCES PERSON(ID) INITIALLY DEFERRED;
CREATE SEQUENCE PK_SEQ_PERSON START 1;
CREATE SEQUENCE PK_SEQ_ADDRESS START 1;
Or create the database directly:
shell> mdl_generate_DB_schema.py -C --admin-dsn="localhost:template1:postgres:" sample_pymodel.py
- Use it!
-
>>> from Sample.Person import Person
>>> from Sample.Address import Address
>>> from Modeling.EditingContext import EditingContext
>>> ec=EditingContext()
>>> # create objects
... john=Person(firstName='John', lastName='Cleese')
>>> ec.insert(john)
>>> jeanne=Person(firstName='Jeanne', lastName='Cleese')
>>> ec.insert(jeanne)
>>> # create relationships
... a_john=Address(town='London')
>>> ec.insert(a_john)
>>> john.addToAddresses(a_john); a_john.setPerson(john)
>>>
>>> a_jeanne=Address(town='Paris')
>>> ec.insert(a_jeanne)
>>> jeanne.addToAddresses(a_jeanne); a_jeanne.setPerson(jeanne)
>>> # save changes
>>> ec.saveChanges()
>>> # fetch objects
... in_london=ec.fetch('Person', 'addresses.town ilike "*london*"')
>>> [(p.getLastName(), p.getFirstName()) for p in in_london]
|