Discuss / Python / 为什么查询出来的书名不能直接显示呢?

为什么查询出来的书名不能直接显示呢?

Topic source

o0stanley0o

#1 Created at ... [Delete] [Delete and Lock User]

# Add a book  一共添加了3本书 给user1

session = DBSession()

new_book = Book(id='9', name='book9', user_id='1')

session.add(new_book)

session.commit()

session.close()

# Select userinfo from table

session = DBSession()

user = session.query(User).filter(User.id == '1').one()

print(user.books)

session.close()

========结果==============

[<__main__.Book object at 0x000000000397A748>, <__main__.Book object at 0x000000000397A7B8>, <__main__.Book object at 0x000000000397A828>]

问题:如何才能打印出关联的书名,而不是地址呢?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

面向对象高级编程 - 定制类 - 自己写个**__str__**

o0stanley0o

#3 Created at ... [Delete] [Delete and Lock User]

感谢廖大的回复,这个内容在您之前的定制类里就学习了,当时还没反应过来有什么用,这下知道了~

在定义Book这个class的时候,写个__repr__让它返回book's name就好了:(一开始加到User里了,发现不行……)

class Book(Base):

    __tablename__ = 'book'

    id = Column(String(20), primary_key=True)

    name = Column(String(20))

    user_id = Column(String(20), ForeignKey('user.id'))  # 通过外键与user表相连

    username = relationship('User')

    def __repr__(self):

        return self.name

=======结果===========

print("%s 拥有的图书有:%s" % (user.name, user.books))

Stanley 拥有的图书有:[BK1, BK2, BK5]


  • 1

Reply