# Database Schema Definition in Python

> The eXtremeDB Python wrapper has the `mcocomp` runtime compiled in, so the database schema can be defined in the form of text, just like a regular C API schema (`mco`) file.

> (Please see the C API Users_Guide page for details on schema definition using the eXtremeDB DDL).

> For example, the following is a simple database schema defined with a Python string:

>         schema = '''
>             #define uint4     unsigned<4>
>             declare database opendb;
>             class myclass
>              {
>                 uint4 i4;
>             };
>         '''

> To process and load this schema, call the `load_dictionary()` method:

>          dict = exdb.load_dictionary(schema)
>          dict
>         <eXDB.Dictionary object at 0x1006e0790>

> The complete `load_dictionary()` method signature is quite complicated as it includes all the options for the `mcocomp` schema compiler:

>         def load_dictionary(schema, nosort=False, dumpxml=False, genhpp=False, 					gencs=False, genjava=False, outDir='.',
>                     					csNamespace='eXtremeDB', javaPackage='eXtremeDB', cmode1=False, 						genXmlMethods=False, genSql=False,
>                     							largeDatabase=False, wcharSize=2, use_prefix=False, include_dir='.', 							compact=False, persistent=False,
>                     							transient=False, suppress_api=False, 							debug=False):

> Only the `schema` argument itself is mandatory; all other arguments are optional and take the defaults indicated above.

> ## Persistent Databases

> For persistent database applications the database classes are defined exactly as for in-memory databases. The difference between in-memory and persistent database applications in Python is in the argument `is_disk` passed to wrapper (exdb) method `open_database()` (`is_disk=True` for persistent media, `is_disk=False` for in-memory) .