【问题标题】:Query over foreign keys in SQLAlchemy在 SQLAlchemy 中查询外键
【发布时间】:2015-02-13 09:26:07
【问题描述】:

我正在尝试在 flask-SQLAlchemy 中查询我的数据库。我使用了经典的对象关系方法:

class User(object):

    query = db_session.query_property()

    def __init__(self):
        pass
    def __repr__(self):
        return '<User %i>' % (self.id)


class Context(object):

    query = db_session.query_property()

    def __init__(self, name=None, description=None, private=False):
        self.name = name
        self.description = description
        self.private = private

    def __repr__(self):
        return '<Context %r>' % (self.name)

class Beacon(object):

    query = db_session.query_property()

    def __init__(self, UUID, minor,major, context=None):
        self.UUID = UUID
        self.major = major
        self.minor = minor
        self.context = context

    def __repr__(self):
        return '<Beacon UUID: %r major: %r minor: %r>' 
        % ((self.UUID),(self.major), (self.minor))

users = Table('users', metadata, 
    Column('id',Integer, primary_key=True))   
mapper(User, users, properties={
    'beacons' : relationship(Beacon, backref='user'), 
    'contexts' : relationship(Context, backref='user')
    })

contexts = Table('contexts', metadata, 
    Column('id', Integer, primary_key=True), 
    Column('name', String(50), nullable=True), 
    Column('description', String(255)), 
    Column('private', Boolean, default=True), 
    Column('user_id', Integer, ForeignKey('users.id'), nullable=False),
    UniqueConstraint('name', 'user_id','private')) 
mapper(Context, contexts, properties={
    'beacons' : relationship(Beacon, backref='context')
    })

beacons = Table('beacons', metadata, 
    Column('id',Integer, primary_key=True),
    Column('UUID',String(32), nullable=True),
    Column('major', String(4), nullable=True),
    Column('minor', String(4), nullable=True),
    Column('user_id', Integer, ForeignKey('users.id')),
    Column('context_id', Integer, ForeignKey('contexts.id')),
    UniqueConstraint('UUID', 'major','minor'))

mapper(Beacon, beacons)

问题很简单:如何查询外键?我想例如获取某个用户拥有的并且其上下文设置为私有的所有信标。

【问题讨论】:

    标签: python sql flask flask-sqlalchemy


    【解决方案1】:

    SQLAlchemy 中有一个association proxy 功能。

    使用它,您可以获得这样的信标:

    [beacon for beacon in user.beacons if beacon.context.private == True]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 2017-08-28
      • 2012-05-15
      • 2021-12-27
      • 2021-07-22
      • 2017-04-05
      • 2018-06-18
      • 1970-01-01
      相关资源
      最近更新 更多