__init__.py :  » Database » SQLAlchemy » SQLAlchemy-0.6.0 » examples » elementtree » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Database » SQLAlchemy 
SQLAlchemy » SQLAlchemy 0.6.0 » examples » elementtree » __init__.py
"""
Illustrates three strategies for persisting and querying XML documents as represented by 
ElementTree in a relational database.   The techniques do not apply any mappings to the ElementTree objects directly, so are compatible with the native cElementTree as well as lxml, and can be adapted to suit any kind of DOM representation system.   Querying along xpath-like strings is illustrated as well.

In order of complexity:

* ``pickle.py`` - Quick and dirty, serialize the whole DOM into a BLOB column.  While the example
  is very brief, it has very limited functionality.
* ``adjacency_list.py`` - Each DOM node is stored in an individual table row, with attributes
  represented in a separate table.  The nodes are associated in a hierarchy using an adjacency list
  structure.  A query function is introduced which can search for nodes along any path with a given
  structure of attributes, basically a (very narrow) subset of xpath.
* ``optimized_al.py`` - Uses the same strategy as ``adjacency_list.py``, but adds a
  :class:`~sqlalchemy.orm.interfaces.MapperExtension` which optimizes how the hierarchical structure  
  is loaded, such that the full set of DOM nodes are loaded within a single table result set, and
  are organized hierarchically as they are received during a load.

E.g.::
    
    # parse an XML file and persist in the database
    doc = ElementTree.parse("test.xml")
    session.add(Document(file, doc))
    session.commit()
    
    # locate documents with a certain path/attribute structure 
    for document in find_document('/somefile/header/field2[@attr=foo]'):
        # dump the XML
        print document
    
"""
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.