• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python orm.relationship函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中sqlalchemy.orm.relationship函数的典型用法代码示例。如果您正苦于以下问题:Python relationship函数的具体用法?Python relationship怎么用?Python relationship使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了relationship函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: test_overlapping_attribute_error

    def test_overlapping_attribute_error(self):
        place, Transition, place_input, Place, transition = (
            self.tables.place,
            self.classes.Transition,
            self.tables.place_input,
            self.classes.Place,
            self.tables.transition,
        )

        mapper(
            Place,
            place,
            properties={
                "transitions": relationship(
                    Transition, secondary=place_input, backref="places"
                )
            },
        )
        mapper(
            Transition,
            transition,
            properties={
                "places": relationship(
                    Place, secondary=place_input, backref="transitions"
                )
            },
        )
        assert_raises_message(
            sa.exc.ArgumentError,
            "property of that name exists",
            sa.orm.configure_mappers,
        )
开发者ID:BY-jk,项目名称:sqlalchemy,代码行数:32,代码来源:test_manytomany.py


示例2: test_flush_size

    def test_flush_size(self):
        foobars, nodes = self.tables.foobars, self.tables.nodes

        class Node(fixtures.ComparableEntity):
            pass
        class FooBar(fixtures.ComparableEntity):
            pass

        mapper(Node, nodes, properties={
            'children':relationship(Node),
            'foobars':relationship(FooBar)
        })
        mapper(FooBar, foobars)

        sess = create_session()
        n1 = Node(data='n1')
        n2 = Node(data='n2')
        n1.children.append(n2)
        sess.add(n1)
        # ensure "foobars" doesn't get yanked in here
        self._assert_uow_size(sess, 3)

        n1.foobars.append(FooBar())
        # saveupdateall/deleteall for FooBar added here,
        # plus processstate node.foobars 
        # currently the "all" procs stay in pairs
        self._assert_uow_size(sess, 6)

        sess.flush()
开发者ID:ContextLogic,项目名称:sqlalchemy,代码行数:29,代码来源:test_unitofworkv2.py


示例3: test_path_entity

    def test_path_entity(self):
        """test the legacy *addl_attrs argument."""

        User = self.classes.User
        Order = self.classes.Order
        Item = self.classes.Item

        users = self.tables.users
        orders = self.tables.orders
        items = self.tables.items
        order_items = self.tables.order_items

        mapper(User, users, properties={
                "orders": relationship(Order, lazy="joined")
            })
        mapper(Order, orders, properties={
                "items": relationship(Item, secondary=order_items, lazy="joined")
            })
        mapper(Item, items)

        sess = create_session()

        exp = ("SELECT users.id AS users_id, users.name AS users_name, "
            "items_1.id AS items_1_id, orders_1.id AS orders_1_id, "
            "orders_1.user_id AS orders_1_user_id, orders_1.address_id "
            "AS orders_1_address_id, orders_1.description AS "
            "orders_1_description, orders_1.isopen AS orders_1_isopen "
            "FROM users LEFT OUTER JOIN orders AS orders_1 "
            "ON users.id = orders_1.user_id LEFT OUTER JOIN "
            "(order_items AS order_items_1 JOIN items AS items_1 "
                "ON items_1.id = order_items_1.item_id) "
            "ON orders_1.id = order_items_1.order_id")

        q = sess.query(User).options(defer(User.orders, Order.items, Item.description))
        self.assert_compile(q, exp)
开发者ID:DeepakAlevoor,项目名称:sqlalchemy,代码行数:35,代码来源:test_deferred.py


示例4: setup_mappers

    def setup_mappers(cls):
        Right, Middle, middle, right, left, Left = (
            cls.classes.Right,
            cls.classes.Middle,
            cls.tables.middle,
            cls.tables.right,
            cls.tables.left,
            cls.classes.Left,
        )

        # set up bi-directional eager loads
        mapper(Left, left)
        mapper(Right, right)
        mapper(
            Middle,
            middle,
            properties=dict(
                left=relationship(
                    Left,
                    lazy="joined",
                    backref=backref("middle", lazy="joined"),
                ),
                right=relationship(
                    Right,
                    lazy="joined",
                    backref=backref("middle", lazy="joined"),
                ),
            ),
        ),
开发者ID:BY-jk,项目名称:sqlalchemy,代码行数:29,代码来源:test_assorted_eager.py


示例5: test_distinct

    def test_distinct(self):
        users, items, order_items, orders, Item, User, Address, Order, addresses = (
            self.tables.users,
            self.tables.items,
            self.tables.order_items,
            self.tables.orders,
            self.classes.Item,
            self.classes.User,
            self.classes.Address,
            self.classes.Order,
            self.tables.addresses,
        )

        mapper(Item, items)
        mapper(Order, orders, properties={"items": relationship(Item, secondary=order_items, lazy="select")})
        mapper(
            User,
            users,
            properties={
                "addresses": relationship(mapper(Address, addresses), lazy="select"),
                "orders": relationship(Order, lazy="select"),
            },
        )

        sess = create_session()
        q = sess.query(User)

        # use a union all to get a lot of rows to join against
        u2 = users.alias("u2")
        s = sa.union_all(u2.select(use_labels=True), u2.select(use_labels=True), u2.select(use_labels=True)).alias("u")
        l = q.filter(s.c.u2_id == User.id).order_by(User.id).distinct().all()
        eq_(self.static.user_all_result, l)
开发者ID:vishvananda,项目名称:sqlalchemy,代码行数:32,代码来源:test_lazy_relations.py


示例6: test_non_orphan

    def test_non_orphan(self):
        """test that an entity can have two parent delete-orphan
        cascades, and persists normally."""

        class Address(_fixtures.Base):
            pass
        class Home(_fixtures.Base):
            pass
        class Business(_fixtures.Base):
            pass

        mapper(Address, addresses)
        mapper(Home, homes, properties={'address'
               : relationship(Address, cascade='all,delete-orphan',
               single_parent=True)})
        mapper(Business, businesses, properties={'address'
               : relationship(Address, cascade='all,delete-orphan',
               single_parent=True)})

        session = create_session()
        h1 = Home(description='home1', address=Address(street='address1'))
        b1 = Business(description='business1',
                      address=Address(street='address2'))
        session.add_all((h1,b1))
        session.flush()
        session.expunge_all()

        eq_(session.query(Home).get(h1.id), Home(description='home1',
            address=Address(street='address1')))
        eq_(session.query(Business).get(b1.id),
            Business(description='business1',
            address=Address(street='address2')))
开发者ID:AndryulE,项目名称:kitsune,代码行数:32,代码来源:test_cascade.py


示例7: setup_mappers

 def setup_mappers(cls):
     mapper(T1, t1, properties=dict(t2=relationship(T2,
            cascade='all, delete-orphan', single_parent=True)))
     mapper(T2, t2, properties=dict(t3=relationship(T3,
            cascade='all, delete-orphan', single_parent=True,
            backref=backref('t2', uselist=False))))
     mapper(T3, t3)
开发者ID:AndryulE,项目名称:kitsune,代码行数:7,代码来源:test_cascade.py


示例8: test_cycle

    def test_cycle(self):
        """
        This test has a peculiar aspect in that it doesn't create as many
        dependent relationships as the other tests, and revealed a small
        glitch in the circular dependency sorting.

        """

        person, ball, Ball, Person = (self.tables.person,
                                self.tables.ball,
                                self.classes.Ball,
                                self.classes.Person)

        mapper(Ball, ball)
        mapper(Person, person, properties=dict(
            balls=relationship(Ball,
                           primaryjoin=ball.c.person_id == person.c.id,
                           remote_side=ball.c.person_id),
            favorite=relationship(Ball,
                              primaryjoin=person.c.favorite_ball_id == ball.c.id,
                              remote_side=ball.c.id)))

        b = Ball()
        p = Person()
        p.balls.append(b)
        sess = create_session()
        sess.add(p)
        sess.flush()
开发者ID:DeepakAlevoor,项目名称:sqlalchemy,代码行数:28,代码来源:test_cycles.py


示例9: upgrade

    def upgrade(self):
        self.loadVersion()
        log.warning('Upgrading Database schema from version {0} to version {1}'.format(self._schema_version, self._version))
        
        for version in range(1, self._version + 1):
            log.warning('Upgrading schema version to {0}'.format(version))
            schema_fun = 'upgrade_{0}_Schema'.format(version)
            ddl_fun = 'upgrade_{0}_DDL'.format(version)
            if self._schema_version < version:
                if hasattr(self.__class__, ddl_fun) and callable(getattr(self.__class__, ddl_fun)):
                    log.warning('Executing ddl function: {0}'.format(ddl_fun))
                    getattr(self, ddl_fun)()
                self._setSchemaVersion(version)
                
            if hasattr(self.__class__, schema_fun) and callable(getattr(self.__class__, schema_fun)):
                log.warning('Executing schema function: {0}'.format(schema_fun))
                getattr(self, schema_fun)()

        
        
        mapper(FirmwareType, Table('firmware_type', self._metadata))
        
        mapper(Firmware, Table('firmware', self._metadata), properties={
            'type' : relationship(FirmwareType)
        })
        
        mapper(Node, Table('node', self._metadata), properties={
            'firmware' : relationship(Firmware)
        })
        
        mapper(Sensor, Table('sensor', self._metadata), properties={
            'node' : relationship(Node)
        })
开发者ID:woisy00,项目名称:pymygw,代码行数:33,代码来源:Entities.py


示例10: setup_mappers

    def setup_mappers(cls):
        Category, owners, Option, tests, Thing, Owner, options, categories = (
            cls.classes.Category,
            cls.tables.owners,
            cls.classes.Option,
            cls.tables.tests,
            cls.classes.Thing,
            cls.classes.Owner,
            cls.tables.options,
            cls.tables.categories)

        mapper(Owner, owners)

        mapper(Category, categories)

        mapper(Option, options, properties=dict(
            owner=relationship(Owner, viewonly=True),
            test=relationship(Thing, viewonly=True)))

        mapper(Thing, tests, properties=dict(
            owner=relationship(Owner, backref='tests'),
            category=relationship(Category),
            owner_option=relationship(
                Option, primaryjoin=sa.and_(
                    tests.c.id == options.c.test_id,
                    tests.c.owner_id == options.c.owner_id),
                foreign_keys=[options.c.test_id, options.c.owner_id],
                uselist=False)))
开发者ID:anti-social,项目名称:sqlalchemy,代码行数:28,代码来源:test_assorted_eager.py


示例11: test_limit

    def test_limit(self):
        """Limit operations combined with lazy-load relationships."""

        users, items, order_items, orders, Item, User, Address, Order, addresses = (self.tables.users,
                                self.tables.items,
                                self.tables.order_items,
                                self.tables.orders,
                                self.classes.Item,
                                self.classes.User,
                                self.classes.Address,
                                self.classes.Order,
                                self.tables.addresses)


        mapper(Item, items)
        mapper(Order, orders, properties={
            'items':relationship(Item, secondary=order_items, lazy='subquery',
                order_by=items.c.id)
        })
        mapper(User, users, properties={
            'addresses':relationship(mapper(Address, addresses),
                            lazy='subquery',
                            order_by=addresses.c.id),
            'orders':relationship(Order, lazy='select', order_by=orders.c.id)
        })

        sess = create_session()
        q = sess.query(User)

        l = q.order_by(User.id).limit(2).offset(1).all()
        eq_(self.static.user_all_result[1:3], l)

        sess = create_session()
        l = q.order_by(sa.desc(User.id)).limit(2).offset(2).all()
        eq_(list(reversed(self.static.user_all_result[0:2])), l)
开发者ID:sleepsonthefloor,项目名称:sqlalchemy,代码行数:35,代码来源:test_subquery_relations.py


示例12: fk_rel

def fk_rel(cls, attrib='id', nullable=False, index=True, primary_key=False,
           doc=None, ondelete='CASCADE', backref=None, order_by=None):
    '''Returns a ForeignKey column and a relationship,
        while automatically setting the type of the foreign key.

        Usage::

            # A relationship in an Address model pointing to a parent Person:
            person_id, person = fk_rel(Person, nullable=False,
                index=True, backref='addresses', ondelete='CASCADE')

        A backref is created only if you provide its name in the argument.
        ``nullable`` and ``index`` are usually ommited, because these are the
        default values and they are good.
        ``ondelete`` is "CASCADE" by default, but you can set it to "SET NULL",
        or None which translates to "NO ACTION" (less interesting).
        If provided, ``order_by`` is used on the backref.
        You may also pass an ``attrib`` which is the column name for
        the foreign key.
        '''
    # http://docs.sqlalchemy.org/en/latest/orm/collections.html#passive-deletes
    if ondelete == 'CASCADE':
        cascade = CASC
        passive_deletes = True
    else:
        cascade = False  # meaning "save-update, merge"
        passive_deletes = False

    return (fk(getattr(cls, attrib), nullable=nullable, index=index,
               primary_key=primary_key, doc=doc, ondelete=ondelete),
            relationship(cls, backref=_backref(
                backref, cascade=cascade, passive_deletes=passive_deletes,
                order_by=order_by))
            if backref else relationship(cls))
开发者ID:leofigs,项目名称:bag,代码行数:34,代码来源:tricks.py


示例13: test_collection_setstate

    def test_collection_setstate(self):
        """test a particular cycle that requires CollectionAdapter
        to not rely upon InstanceState to deserialize."""

        m = MetaData()
        c1 = Table('c1', m,
            Column('parent_id', String,
                        ForeignKey('p.id'), primary_key=True)
        )
        c2 = Table('c2', m,
            Column('parent_id', String,
                        ForeignKey('p.id'), primary_key=True)
        )
        p = Table('p', m,
            Column('id', String, primary_key=True)
        )

        mapper(Parent, p, properties={
            'children1':relationship(Child1),
            'children2':relationship(Child2)
        })
        mapper(Child1, c1)
        mapper(Child2, c2)

        obj = Parent()
        screen1 = Screen(obj)
        screen1.errors = [obj.children1, obj.children2]
        screen2 = Screen(Child2(), screen1)
        pickle.loads(pickle.dumps(screen2))
开发者ID:afeide,项目名称:LuoYunCloud,代码行数:29,代码来源:test_pickled.py


示例14: create_mapper

def create_mapper(molecule_design_tbl, molecule_design_structure_tbl,
                  single_supplier_molecule_design_tbl,
                  molecule_design_gene_tbl, refseq_gene_tbl):
    "Mapper factory."
    md = molecule_design_tbl
    ssmd = single_supplier_molecule_design_tbl
    mdg = molecule_design_gene_tbl
    rsg = refseq_gene_tbl
    m = mapper(MoleculeDesign, molecule_design_tbl,
          id_attribute='molecule_design_id',
          properties=dict(
            molecule_type=relationship(MoleculeType), #, lazy='joined'),
            chemical_structures=relationship(
                                    ChemicalStructure,
                                    secondary=molecule_design_structure_tbl,
                                    back_populates='molecule_designs'),
            supplier_molecule_designs=
                        relationship(SupplierMoleculeDesign,
                                     secondary=ssmd,
                                     back_populates='molecule_design'),
            genes=relationship(Gene, viewonly=True, secondary=mdg,
                primaryjoin=(mdg.c.molecule_design_id ==
                                                    md.c.molecule_design_id),
                secondaryjoin=(mdg.c.gene_id == rsg.c.gene_id),
                foreign_keys=(mdg.c.molecule_design_id, mdg.c.gene_id),
                back_populates='molecule_designs',
                ),
            ),
          polymorphic_on=molecule_design_tbl.c.molecule_type_id,
          polymorphic_identity=MOLECULE_TYPE,
          )
    return m
开发者ID:helixyte,项目名称:TheLMA,代码行数:32,代码来源:moleculedesign.py


示例15: test_pending_expunge

    def test_pending_expunge(self):
        class Order(_fixtures.Base):
            pass
        class Item(_fixtures.Base):
            pass
        class Attribute(_fixtures.Base):
            pass

        mapper(Attribute, attributes)
        mapper(Item, items, properties=dict(
            attributes=relationship(Attribute, cascade="all,delete-orphan",
                                    backref="item")
        ))
        mapper(Order, orders, properties=dict(
            items=relationship(Item, cascade="all,delete-orphan",
                                    backref="order")
        ))

        s = create_session()
        order = Order(name="order1")
        s.add(order)

        attr = Attribute(name="attr1")
        item = Item(name="item1", attributes=[attr])

        order.items.append(item)
        order.items.remove(item)

        assert item not in s
        assert attr not in s

        s.flush()
        assert orders.count().scalar() == 1
        assert items.count().scalar() == 0
        assert attributes.count().scalar() == 0
开发者ID:AndryulE,项目名称:kitsune,代码行数:35,代码来源:test_cascade.py


示例16: test_limit

    def test_limit(self):
        """test limit operations combined with lazy-load relationships."""

        users, items, order_items, orders, Item, \
            User, Address, Order, addresses = (
                self.tables.users,
                self.tables.items,
                self.tables.order_items,
                self.tables.orders,
                self.classes.Item,
                self.classes.User,
                self.classes.Address,
                self.classes.Order,
                self.tables.addresses)

        mapper(Item, items)
        mapper(Order, orders, properties={
            'items': relationship(Item, secondary=order_items, lazy='select')
        })
        mapper(User, users, properties={
            'addresses': relationship(
                mapper(Address, addresses), lazy='select'),
            'orders': relationship(Order, lazy='select')
        })

        sess = create_session()
        q = sess.query(User)

        if testing.against('mssql'):
            result = q.limit(2).all()
            assert self.static.user_all_result[:2] == result
        else:
            result = q.limit(2).offset(1).all()
            assert self.static.user_all_result[1:3] == result
开发者ID:cpcloud,项目名称:sqlalchemy,代码行数:34,代码来源:test_lazy_relations.py


示例17: test_orphan

    def test_orphan(self):
        """test that an entity can have two parent delete-orphan
        cascades, and is detected as an orphan when saved without a
        parent."""

        class Address(_fixtures.Base):
            pass

        class Home(_fixtures.Base):
            pass

        class Business(_fixtures.Base):
            pass

        mapper(Address, addresses)
        mapper(Home, homes, properties={'address'
               : relationship(Address, cascade='all,delete-orphan',
               single_parent=True)})
        mapper(Business, businesses, properties={'address'
               : relationship(Address, cascade='all,delete-orphan',
               single_parent=True)})
        session = create_session()
        a1 = Address()
        session.add(a1)
        try:
            session.flush()
            assert False
        except orm_exc.FlushError, e:
            assert True
开发者ID:AndryulE,项目名称:kitsune,代码行数:29,代码来源:test_cascade.py


示例18: test_distinct

    def test_distinct(self):
        users, items, order_items, orders, \
            Item, User, Address, Order, addresses = (
                self.tables.users,
                self.tables.items,
                self.tables.order_items,
                self.tables.orders,
                self.classes.Item,
                self.classes.User,
                self.classes.Address,
                self.classes.Order,
                self.tables.addresses)

        mapper(Item, items)
        mapper(Order, orders, properties={
            'items': relationship(Item, secondary=order_items, lazy='select')
        })
        mapper(User, users, properties={
            'addresses': relationship(
                mapper(Address, addresses), lazy='select'),
            'orders': relationship(Order, lazy='select')
        })

        sess = create_session()
        q = sess.query(User)

        # use a union all to get a lot of rows to join against
        u2 = users.alias('u2')
        s = sa.union_all(
            u2.select(use_labels=True),
            u2.select(use_labels=True), u2.select(use_labels=True)).alias('u')
        result = q.filter(s.c.u2_id == User.id).order_by(User.id).distinct() \
            .all()
        eq_(self.static.user_all_result, result)
开发者ID:cpcloud,项目名称:sqlalchemy,代码行数:34,代码来源:test_lazy_relations.py


示例19: _u_ad_fixture

    def _u_ad_fixture(self, populate_user, dont_use_get=False):
        users, Address, addresses, User = (
            self.tables.users,
            self.classes.Address,
            self.tables.addresses,
            self.classes.User)

        mapper(User, users, properties={
            'addresses': relationship(Address, back_populates='user')
        })
        mapper(Address, addresses, properties={
            'user': relationship(
                User,
                primaryjoin=and_(
                    users.c.id == addresses.c.user_id, users.c.id != 27)
                if dont_use_get else None,
                back_populates='addresses'
            )
        })

        sess = create_session()
        a1 = Address(email_address='a1')
        sess.add(a1)
        if populate_user:
            a1.user = User(name='ed')
        sess.flush()
        if populate_user:
            sess.expire_all()
        return User, Address, sess, a1
开发者ID:cpcloud,项目名称:sqlalchemy,代码行数:29,代码来源:test_lazy_relations.py


示例20: test_limit

    def test_limit(self):
        """test limit operations combined with lazy-load relationships."""

        users, items, order_items, orders, Item, User, Address, Order, addresses = (
            self.tables.users,
            self.tables.items,
            self.tables.order_items,
            self.tables.orders,
            self.classes.Item,
            self.classes.User,
            self.classes.Address,
            self.classes.Order,
            self.tables.addresses,
        )

        mapper(Item, items)
        mapper(Order, orders, properties={"items": relationship(Item, secondary=order_items, lazy="select")})
        mapper(
            User,
            users,
            properties={
                "addresses": relationship(mapper(Address, addresses), lazy="select"),
                "orders": relationship(Order, lazy="select"),
            },
        )

        sess = create_session()
        q = sess.query(User)

        if testing.against("maxdb", "mssql"):
            l = q.limit(2).all()
            assert self.static.user_all_result[:2] == l
        else:
            l = q.limit(2).offset(1).all()
            assert self.static.user_all_result[1:3] == l
开发者ID:vishvananda,项目名称:sqlalchemy,代码行数:35,代码来源:test_lazy_relations.py



注:本文中的sqlalchemy.orm.relationship函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python orm.scoped_session函数代码示例发布时间:2022-05-27
下一篇:
Python orm.relation函数代码示例发布时间:2022-05-27
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap