File: persistent.py

package info (click to toggle)
pyamf 0.6.1%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 7,692 kB
  • sloc: python: 17,944; xml: 455; makefile: 116; sql: 38; java: 11; sh: 7
file content (60 lines) | stat: -rw-r--r-- 2,003 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.

"""
Schema for SQLAlchemy Addressbook example.

@since: 0.4.1
"""


import sqlalchemy as sa
from sqlalchemy import orm

import models


class Schema(object):
    """
    Describes the schema and mappers used by the SQLAlchemy example.
    """
    engine = sa.create_engine('sqlite:///sqlalchemy_example.db', echo=False)

    def _get_session(self):
        return orm.scoped_session(orm.sessionmaker(bind=self.engine))

    session = property(_get_session)

    def createSchema(self):
        metadata = sa.MetaData()

        metadata = sa.MetaData()
        self.users_table = sa.Table('users_table', metadata,
            sa.Column('id', sa.Integer, primary_key=True),
            sa.Column('first_name', sa.String(50)),
            sa.Column('last_name', sa.String(50)),
            sa.Column('created', sa.TIMESTAMP, nullable=False,
                                 server_default="2001-01-01 01:01:01"))

        self.phone_numbers_table = sa.Table('phone_numbers_table', metadata,
            sa.Column('id', sa.Integer, primary_key=True),
            sa.Column('user_id', sa.Integer, sa.ForeignKey('users_table.id')),
            sa.Column('label', sa.String(50)),
            sa.Column('number', sa.String(50)))

        self.emails_table = sa.Table('emails_table', metadata,
            sa.Column('id', sa.Integer, primary_key=True),
            sa.Column('user_id', sa.Integer, sa.ForeignKey('users_table.id')),
            sa.Column('label', sa.String(50)),
            sa.Column('email', sa.String(50)))

        metadata.create_all(self.engine)

    def createMappers(self):
        orm.clear_mappers()

        orm.mapper(models.User, self.users_table, properties={
            'emails': orm.relation(models.Email, lazy=False),
            'phone_numbers': orm.relation(models.PhoneNumber, lazy=True)})
        orm.mapper(models.Email, self.emails_table)
        orm.mapper(models.PhoneNumber, self.phone_numbers_table)