推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dizzy
V2EX  ›  Python

请问下大家,有关 flask-sqlalchemy query 返回的问题。

  •  
  •   dizzy · Jun 1, 2015 · 8327 views
    This topic created in 4023 days ago, the information mentioned may be changed or developed.

    大家好,我在flask项目里面用flask-sqlalchemy的时候,遇到了查询不出结果的问题,于是我按照文档写了一个简单的程序验证,还是同样的问题,具体如下:
    test.py:

    from flask import Flask
    from flask.ext.sqlalchemy import SQLAlchemy

    app = Flask(name)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
    db = SQLAlchemy(app)

    class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email
    

    我在命令行中提交:

    from test import db, User
    db.create_all()
    admin = User('admin', '[email protected]')
    guest = User('guest', '[email protected]')
    db.session.add(admin)
    db.session.add(guest)
    db.session.commit()
    User.query.all()
    本来应该返回一个包含结果的列表,但是返回的确实对象:
    [<test.User object at 0x7fc61b357490>, <test.User object at 0x7fc61af1c810>]
    之后我各种google未果,stackoverflow上面搜索也未果。请问下大家,我这里到底是哪出问题?谢谢。

    10 replies    2015-06-02 19:11:03 +08:00
    billlee
        1
    billlee  
       Jun 1, 2015   ❤️ 1
    这个不就是包含结果(两个 test.User 实例)的列表吗?
    dizzy
        2
    dizzy  
    OP
       Jun 1, 2015
    @billlee 请问怎样才能查询出结果?
    dizzy
        3
    dizzy  
    OP
       Jun 1, 2015
    @billlee 我的意思是,按照文档中的描述,结果应该是[<User u'admin'>, <User u'guest'>]这样的。
    jas0ndyq
        4
    jas0ndyq  
       Jun 1, 2015   ❤️ 1
    i循环进去i.username
    dizzy
        5
    dizzy  
    OP
       Jun 1, 2015
    @jas0ndyq 谢谢。
    awanabe
        6
    awanabe  
       Jun 1, 2015   ❤️ 1
    @dizzy
    class User 中增加一个 __repr__ 方法.
    你想要的结果 return '<User %s>' % self. username
    如果没有这个方法..就会打出 对象地址.
    这个就是类似于Java中的toString方法
    powergx
        7
    powergx  
       Jun 1, 2015   ❤️ 1
    user class 又没有写 def __repr__ , 打印出来当然没有内容了

    下面代码放进 user class 就能正确显示了
    def __repr__(self):
    return '%s (%r, %r,%r)' % (
    self.__class__.__name__, self.id, self.username,self. email)
    awanabe
        8
    awanabe  
       Jun 1, 2015   ❤️ 1
    @dizzy 你还可以试试 __str__() 这个方法...
    去了解下 __str__() 和 __repr__() 的不同
    dizzy
        9
    dizzy  
    OP
       Jun 1, 2015
    @powergx
    @awanabe 原来是这样,我之前也去了解过这两个方法,当时我以为只是测试的时候用。谢谢你们的解答。
    elvis_w
        10
    elvis_w  
       Jun 2, 2015   ❤️ 1
    @dizzy 本来就是测试用的,实际在使用当中应该用遍历器遍历的
    user = User.query.all()
    for u in users:
    ... print u.id,u.nickname,u.email
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1012 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 23:26 · PVG 07:26 · LAX 16:26 · JFK 19:26
    ♥ Do have faith in what you're doing.