2010-09-27 24 views
2

如何獲取應該在關係的另一端的類的名稱?它是在創建關係時宣佈的。我想這些信息應該是sqlalchemy.orm.util.class_mapper的somwhere什麼類型在sqlalchemy的關係的另一端沒有創建對象?

假設我們有這三個類和它們之間的關係。 書* 1 ---大陸架和 書* --- *作者

class Shelf(Base): 
    __tablename__ = 'shelves' 
    id = Column(Integer, primary_key = True) 
    name = Column(String) 
    #one-to-many books by backref in Book.shelf 

    def __init__(self, name=""): 
     self.name = name 

class Book(Base): 
    __tablename__ = 'books' 
    id = Column(Integer, primary_key = True) 
    title = Column(String) 
    #many-to-one shelf 
    shelf_id = Column(Integer, ForeignKey('shelves.id')) 
    shelf = relationship(Shelf, backref=backref('books', order_by=id)) 
    def __init__(self, title=""): 
     self.title = title 

author_book = Table('author_book', metadata, 
        Column('author_id', Integer, ForeignKey('authors.id')), 
        Column('book_id', Integer, ForeignKey('books.id')) 
        ) 

class Author(Base): 
    __tablename__ = 'authors' 
    id = Column(Integer, primary_key = True) 
    name = Column(String) 
    #many-to-many books 
    books = relationship('Book', secondary=author_book, backref='authors') 

    def __init__(self, name=""): 
     self.name = name 

從class_mapper(類).iterate_properties我們可以很容易地得到不同的性質:COLUMNPROPERTY和RelationshipProperty。 應該有一種方法可以獲得相關類的名稱。有任何想法嗎?

回答

1

的情況下,也許一點點整潔的解決方案。

for prop in class_mapper(Shelf).iterate_properties: 
    if isinstance(prop, sqlalchemy.orm.RelationshipProperty): 
     print prop.mapper.class_ 

作品有一個一對多和多對多一對多雙向

0

我發現了一個類型的解決方法,但我不是100%肯定,如果它的工作原理always.To找到一個類(型)預期關係的另一端

class_mapper(Shelf)._props['books'].mapper.class_ 

我們可能不知道屬性的名稱(如書籍在這種情況下),但它是不是很麻煩辦理字典* _props *與尋找價值女巫是sqlalchemy.orm.properties.RelationshipProperty

0

由於SQLAlchemy的0.8這一點是可以做到的:

from sqlalchemy import inspect 
inspect(Shelf).relationships['books'].mapper.class_ 
相關問題