Esempio n. 1
0
 def define_tables(cls, metadata):
     Table('Table1', metadata,
         Column('ID', Integer, primary_key=True))
     Table('Table2', metadata,
           Column('T1ID', Integer, ForeignKey("Table1.ID"),
                  primary_key=True),
           Column('NUM', Integer, primary_key=True))
Esempio n. 2
0
    def test_create_drop_bound(self):

        for meta in (MetaData, ThreadLocalMetaData):
            for bind in (testing.db, testing.db.connect()):
                metadata = meta()
                table = Table('test_table', metadata, Column('foo', Integer))
                metadata.bind = bind
                assert metadata.bind is table.bind is bind
                metadata.create_all()
                assert table.exists()
                metadata.drop_all()
                table.create()
                table.drop()
                assert not table.exists()

                metadata = meta()
                table = Table('test_table', metadata, Column('foo', Integer))

                metadata.bind = bind

                assert metadata.bind is table.bind is bind
                metadata.create_all()
                assert table.exists()
                metadata.drop_all()
                table.create()
                table.drop()
                assert not table.exists()
                if isinstance(bind, engine.Connection):
                    bind.close()
Esempio n. 3
0
 def define_tables(cls, metadata):
     Table(
         'user', metadata,
         Column('code', Integer, primary_key=True),
         Column('status', Integer, primary_key=True),
         Column('username', Unicode(50), nullable=False),
         )
Esempio n. 4
0
 def test_fk_construct(self):
     c1 = Column('foo', Integer)
     c2 = Column('bar', Integer)
     m = MetaData()
     t1 = Table('t', m, c1, c2)
     fk1 = ForeignKeyConstraint(('foo', ), ('bar', ), table=t1)
     assert fk1 in t1.constraints
Esempio n. 5
0
    def test_override_keys(self):
        """test that columns can be overridden with a 'key', 
        and that ForeignKey targeting during reflection still works."""

        meta = MetaData(testing.db)
        a1 = Table('a',
                   meta,
                   Column('x', sa.Integer, primary_key=True),
                   Column('z', sa.Integer),
                   test_needs_fk=True)
        b1 = Table('b',
                   meta,
                   Column('y', sa.Integer, sa.ForeignKey('a.x')),
                   test_needs_fk=True)
        meta.create_all()
        try:
            m2 = MetaData(testing.db)
            a2 = Table('a',
                       m2,
                       Column('x', sa.Integer, primary_key=True, key='x1'),
                       autoload=True)
            b2 = Table('b', m2, autoload=True)

            assert a2.join(b2).onclause.compare(a2.c.x1 == b2.c.y)
            assert b2.c.y.references(a2.c.x1)
        finally:
            meta.drop_all()
Esempio n. 6
0
    def define_tables(self, meta):
        Table('user_t', meta, Column('id', Integer, primary_key=True),
              Column('name', String(50)))

        Table('stuff', meta, Column('id', Integer, primary_key=True),
              Column('date', sa.Date),
              Column('user_id', Integer, ForeignKey('user_t.id')))
Esempio n. 7
0
    def test_nonreflected_fk_raises(self):
        """test that a NoReferencedColumnError is raised when reflecting
        a table with an FK to another table which has not included the target
        column in its reflection.
        
        """
        meta = MetaData(testing.db)
        a1 = Table('a',
                   meta,
                   Column('x', sa.Integer, primary_key=True),
                   Column('z', sa.Integer),
                   test_needs_fk=True)
        b1 = Table('b',
                   meta,
                   Column('y', sa.Integer, sa.ForeignKey('a.x')),
                   test_needs_fk=True)
        meta.create_all()
        try:
            m2 = MetaData(testing.db)
            a2 = Table('a', m2, include_columns=['z'], autoload=True)
            b2 = Table('b', m2, autoload=True)

            assert_raises(tsa.exc.NoReferencedColumnError, a2.join, b2)
        finally:
            meta.drop_all()
Esempio n. 8
0
    def test_index_reflection(self):
        m1 = MetaData(testing.db)
        t1 = Table('party', m1, Column('id', sa.Integer, nullable=False),
                   Column('name', sa.String(20), index=True))
        i1 = sa.Index('idx1', t1.c.id, unique=True)
        i2 = sa.Index('idx2', t1.c.name, t1.c.id, unique=False)
        m1.create_all()
        try:
            m2 = MetaData(testing.db)
            t2 = Table('party', m2, autoload=True)

            print len(t2.indexes), t2.indexes
            assert len(t2.indexes) == 3
            # Make sure indexes are in the order we expect them in
            tmp = [(idx.name, idx) for idx in t2.indexes]
            tmp.sort()
            r1, r2, r3 = [idx[1] for idx in tmp]

            assert r1.name == 'idx1'
            assert r2.name == 'idx2'
            assert r1.unique == True
            assert r2.unique == False
            assert r3.unique == False
            assert [t2.c.id] == r1.columns
            assert [t2.c.name, t2.c.id] == r2.columns
            assert [t2.c.name] == r3.columns
        finally:
            m1.drop_all()
Esempio n. 9
0
    def setup(self):
        meta = MetaData(testing.db)
        global table, GoofyType

        class GoofyType(TypeDecorator):
            impl = String

            def process_bind_param(self, value, dialect):
                if value is None:
                    return None
                return "FOO" + value

            def process_result_value(self, value, dialect):
                if value is None:
                    return None
                return value + "BAR"

        table = Table(
            'tables', meta,
            Column('id',
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True), Column('persons', Integer),
            Column('full', Boolean), Column('goofy', GoofyType(50)))
        table.create(checkfirst=True)
Esempio n. 10
0
    def define_tables(cls, metadata):
        global person_table, employee_table, Person, Employee

        person_table = Table(
            "persons",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("name", String(80)),
        )

        employee_table = Table(
            "employees",
            metadata,
            Column("id",
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True),
            Column("salary", Integer),
            Column("person_id", Integer, ForeignKey("persons.id")),
        )

        class Person(object):
            def __init__(self, name):
                self.name = name

        class Employee(Person):
            pass
Esempio n. 11
0
    def test_compileonattr_rel_backref_a(self):
        m = MetaData()
        t1 = Table('t1', m, Column('id', Integer, primary_key=True),
                   Column('x', Integer))
        t2 = Table('t2', m, Column('id', Integer, primary_key=True),
                   Column('t1_id', Integer, ForeignKey('t1.id')))

        class Base(object):
            def __init__(self, *args, **kwargs):
                pass

        for base in object, Base:

            class A(base):
                pass

            class B(base):
                pass

            mapper(A, t1, properties=dict(bs=relation(B, backref='a')))
            mapper(B, t2)

            b = B()
            assert b.a is None
            a = A()
            b.a = a

            session = create_session()
            session.add(b)
            assert a in session, "base is %s" % base
    def test_unicode_warnings(self):
        metadata = MetaData(testing.db)
        table1 = Table(
            'mytable', metadata,
            Column('col1',
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True), Column('col2', Unicode(30)))
        metadata.create_all()
        i = [1]

        @testing.emits_warning()
        @profile_memory
        def go():

            # execute with a non-unicode object. a warning is emitted,
            # this warning shouldn't clog up memory.

            testing.db.execute(table1.select().where(table1.c.col2 == 'foo%d' %
                                                     i[0]))
            i[0] += 1

        try:
            go()
        finally:
            metadata.drop_all()
Esempio n. 13
0
 def define_tables(cls, metadata):
     Table(
         "data",
         metadata,
         Column('pk1', String(10), primary_key=True),
         Column('pk2', String(10), primary_key=True),
     )
Esempio n. 14
0
    def test_iteration(self):
        metadata = MetaData()
        table1 = Table('table1',
                       metadata,
                       Column('col1', sa.Integer, primary_key=True),
                       schema='someschema')
        table2 = Table('table2',
                       metadata,
                       Column('col1', sa.Integer, primary_key=True),
                       Column('col2', sa.Integer,
                              sa.ForeignKey('someschema.table1.col1')),
                       schema='someschema')
        # ensure this doesnt crash
        print[t for t in metadata.sorted_tables]
        buf = StringIO.StringIO()

        def foo(s, p=None):
            buf.write(s)

        gen = sa.create_engine(testing.db.name + "://",
                               strategy="mock",
                               executor=foo)
        gen = gen.dialect.schemagenerator(gen.dialect, gen)
        gen.traverse(table1)
        gen.traverse(table2)
        buf = buf.getvalue()
        print buf
        if testing.db.dialect.preparer(testing.db.dialect).omit_schema:
            assert buf.index("CREATE TABLE table1") > -1
            assert buf.index("CREATE TABLE table2") > -1
        else:
            assert buf.index("CREATE TABLE someschema.table1") > -1
            assert buf.index("CREATE TABLE someschema.table2") > -1
Esempio n. 15
0
 def define_tables(cls, metadata):
     Table('parent', metadata,
         Column('id', Integer, primary_key=True)
     )
     Table('child', metadata, 
         Column('id', Integer, ForeignKey('parent.id'), primary_key=True)
     )
Esempio n. 16
0
 def define_tables(cls, metadata):
     dt = Table(
         'dt',
         metadata,
         Column('id', Integer, primary_key=True),
         Column('col1', String(20), default="hello"),
     )
Esempio n. 17
0
    def test_tokens(self):
        m = MetaData()
        bind = self.mock_engine()
        sane_alone = Table('t', m, Column('id', Integer))
        sane_schema = Table('t', m, Column('id', Integer), schema='s')
        insane_alone = Table('t t', m, Column('id', Integer))
        insane_schema = Table('t t', m, Column('id', Integer), schema='s s')

        ddl = DDL('%(schema)s-%(table)s-%(fullname)s')

        eq_(ddl._expand(sane_alone, bind), '-t-t')
        eq_(ddl._expand(sane_schema, bind), 's-t-s.t')
        eq_(ddl._expand(insane_alone, bind), '-"t t"-"t t"')
        eq_(ddl._expand(insane_schema, bind), '"s s"-"t t"-"s s"."t t"')

        # overrides are used piece-meal and verbatim.
        ddl = DDL('%(schema)s-%(table)s-%(fullname)s-%(bonus)s',
                  context={
                      'schema': 'S S',
                      'table': 'T T',
                      'bonus': 'b'
                  })
        eq_(ddl._expand(sane_alone, bind), 'S S-T T-t-b')
        eq_(ddl._expand(sane_schema, bind), 'S S-T T-s.t-b')
        eq_(ddl._expand(insane_alone, bind), 'S S-T T-"t t"-b')
        eq_(ddl._expand(insane_schema, bind), 'S S-T T-"s s"."t t"-b')
Esempio n. 18
0
    def test_tometadata_strip_schema(self):
        meta = MetaData()

        table = Table(
            'mytable',
            meta,
            Column('myid', Integer, primary_key=True),
            Column('name', String(40), nullable=True),
            Column('description', String(30),
                   CheckConstraint("description='hi'")),
            UniqueConstraint('name'),
            test_needs_fk=True,
        )

        table2 = Table(
            'othertable',
            meta,
            Column('id', Integer, primary_key=True),
            Column('myid', Integer, ForeignKey('mytable.myid')),
            test_needs_fk=True,
        )

        meta2 = MetaData()
        table_c = table.tometadata(meta2, schema=None)
        table2_c = table2.tometadata(meta2, schema=None)

        eq_(str(table_c.join(table2_c).onclause),
            str(table_c.c.myid == table2_c.c.myid))
        eq_(str(table_c.join(table2_c).onclause),
            'mytable.myid = othertable.myid')
Esempio n. 19
0
 def define_tables(cls, metadata):
     Table('Table1', metadata,
           Column('id', Integer, primary_key=True))
     Table('Table2', metadata,
           Column('t1id', Integer, ForeignKey("Table1.id"),
                  primary_key=True),
           Column('num', Integer, primary_key=True))
Esempio n. 20
0
    def test_compileonattr_rel_backref_b(self):
        m = MetaData()
        t1 = Table('t1', m, Column('id', Integer, primary_key=True),
                   Column('x', Integer))
        t2 = Table('t2', m, Column('id', Integer, primary_key=True),
                   Column('t1_id', Integer, ForeignKey('t1.id')))

        class Base(object):
            def __init__(self):
                pass

        class Base_AKW(object):
            def __init__(self, *args, **kwargs):
                pass

        for base in object, Base, Base_AKW:

            class A(base):
                pass

            class B(base):
                pass

            mapper(A, t1)
            mapper(B, t2, properties=dict(a=relation(A, backref='bs')))

            a = A()
            b = B()
            b.a = a

            session = create_session()
            session.add(a)
            assert b in session, 'base: %s' % base
    def test_mapper_reset(self):
        metadata = MetaData(testing.db)

        table1 = Table(
            "mytable", metadata,
            Column('col1',
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True), Column('col2', String(30)))

        table2 = Table(
            "mytable2", metadata,
            Column('col1',
                   Integer,
                   primary_key=True,
                   test_needs_autoincrement=True), Column('col2', String(30)),
            Column('col3', Integer, ForeignKey("mytable.col1")))

        @profile_memory
        def go():
            m1 = mapper(
                A,
                table1,
                properties={"bs": relationship(B, order_by=table2.c.col1)})
            m2 = mapper(B, table2)

            m3 = mapper(A, table1, non_primary=True)

            sess = create_session()
            a1 = A(col2="a1")
            a2 = A(col2="a2")
            a3 = A(col2="a3")
            a1.bs.append(B(col2="b1"))
            a1.bs.append(B(col2="b2"))
            a3.bs.append(B(col2="b3"))
            for x in [a1, a2, a3]:
                sess.add(x)
            sess.flush()
            sess.expunge_all()

            alist = sess.query(A).order_by(A.col1).all()
            eq_([
                A(col2="a1", bs=[B(col2="b1"), B(col2="b2")]),
                A(col2="a2", bs=[]),
                A(col2="a3", bs=[B(col2="b3")])
            ], alist)

            for a in alist:
                sess.delete(a)
            sess.flush()
            sess.close()
            clear_mappers()

        metadata.create_all()
        try:
            go()
        finally:
            metadata.drop_all()
        assert_no_mappers()
Esempio n. 22
0
    def test_with_inheritance(self):
        metadata = MetaData(testing.db)

        table1 = Table("mytable", metadata,
            Column('col1', Integer, primary_key=True),
            Column('col2', String(30))
            )

        table2 = Table("mytable2", metadata,
            Column('col1', Integer, ForeignKey('mytable.col1'),
                   primary_key=True),
            Column('col3', String(30)),
            )

        @profile_memory
        def go():
            class A(_base.ComparableEntity):
                pass
            class B(A):
                pass

            mapper(A, table1,
                   polymorphic_on=table1.c.col2,
                   polymorphic_identity='a')
            mapper(B, table2,
                   inherits=A,
                   polymorphic_identity='b')

            sess = create_session()
            a1 = A()
            a2 = A()
            b1 = B(col3='b1')
            b2 = B(col3='b2')
            for x in [a1,a2,b1, b2]:
                sess.add(x)
            sess.flush()
            sess.expunge_all()

            alist = sess.query(A).order_by(A.col1).all()
            eq_(
                [
                    A(), A(), B(col3='b1'), B(col3='b2')
                ],
                alist)

            for a in alist:
                sess.delete(a)
            sess.flush()

            # dont need to clear_mappers()
            del B
            del A

        metadata.create_all()
        try:
            go()
        finally:
            metadata.drop_all()
        assert_no_mappers()
Esempio n. 23
0
 def setup(self):
     meta = MetaData(testing.db)
     global table, seq
     seq = Sequence('tid_seq')
     table = Table('tables', meta,
                   Column('id', Integer, seq, primary_key=True),
                   Column('data', String(50)))
     table.create(checkfirst=True)
Esempio n. 24
0
 def define_tables(cls, metadata):
     Table(
         'common', metadata,
         Column('id',
                Integer,
                primary_key=True,
                test_needs_autoincrement=True), Column('data', Integer),
         Column('extra', String(45)))
Esempio n. 25
0
 def setup_class(cls):
     global counters, metadata
     metadata = MetaData()
     counters = Table('forupdate_counters', metadata,
                      Column('counter_id', INT, primary_key=True),
                      Column('counter_value', INT),
                      test_needs_acid=True)
     counters.create(testing.db)
Esempio n. 26
0
 def define_tables(cls, metadata):
     Table(
         "a_table", metadata,
         Column("id",
                Integer(),
                primary_key=True,
                test_needs_autoincrement=True), Column("fui", String(128)),
         Column("b", Integer(), ForeignKey("a_table.id")))
Esempio n. 27
0
        class Child(Base):
            __tablename__ = 'child'
            __table_args__ = {'mysql_engine':'InnoDB'}

            id= Column(Integer, primary_key=True, test_needs_autoincrement=True)
            parent_id = Column(Integer, ForeignKey('parent.id'))

            parent = relationship(Parent, backref=backref("children"))
Esempio n. 28
0
    def test_mapped_managerattr(self):
        t = Table('t', MetaData(), Column('id', Integer, primary_key=True),
                  Column(attributes.ClassManager.MANAGER_ATTR, Integer))

        class T(object):
            pass

        assert_raises(KeyError, mapper, T, t)
Esempio n. 29
0
 def define_tables(cls, metadata):
     Table(
         "data", metadata,
         Column('id',
                Integer,
                primary_key=True,
                test_needs_autoincrement=True),
         Column('data', PickleType(comparator=operator.eq)))
Esempio n. 30
0
 def define_tables(cls, metadata):
     global t1
     t1 = Table(
         't1', metadata,
         Column('id',
                Integer,
                primary_key=True,
                test_needs_autoincrement=True), Column('data', String(50)))
Esempio n. 31
0
 def test_uninitialized_column_copy_events(self):
     msgs = []
     def write(t, c):
         msgs.append("attach %s.%s" % (t.name, c.name))
     c1 = Column('foo', String())
     c1._on_table_attach(write)
     m = MetaData()
     for i in xrange(3):
         cx = c1.copy()
         t = Table('foo%d' % i, m, cx)
     eq_(msgs, ['attach foo0.foo', 'attach foo1.foo', 'attach foo2.foo'])