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

2015-06-01 21:12:31 +08:00
 dizzy

大家好,我在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', 'admin@example.com')
guest = User('guest', 'guest@example.com')
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上面搜索也未果。请问下大家,我这里到底是哪出问题?谢谢。

7373 次点击
所在节点    Python
10 条回复
billlee
2015-06-01 21:33:54 +08:00
这个不就是包含结果(两个 test.User 实例)的列表吗?
dizzy
2015-06-01 21:35:48 +08:00
@billlee 请问怎样才能查询出结果?
dizzy
2015-06-01 21:40:54 +08:00
@billlee 我的意思是,按照文档中的描述,结果应该是[<User u'admin'>, <User u'guest'>]这样的。
jas0ndyq
2015-06-01 21:46:30 +08:00
i循环进去i.username
dizzy
2015-06-01 21:57:34 +08:00
@jas0ndyq 谢谢。
awanabe
2015-06-01 22:45:59 +08:00
@dizzy
class User 中增加一个 __repr__ 方法.
你想要的结果 return '<User %s>' % self. username
如果没有这个方法..就会打出 对象地址.
这个就是类似于Java中的toString方法
powergx
2015-06-01 22:47:13 +08:00
user class 又没有写 def __repr__ , 打印出来当然没有内容了

下面代码放进 user class 就能正确显示了
def __repr__(self):
return '%s (%r, %r,%r)' % (
self.__class__.__name__, self.id, self.username,self. email)
awanabe
2015-06-01 22:47:19 +08:00
@dizzy 你还可以试试 __str__() 这个方法...
去了解下 __str__() 和 __repr__() 的不同
dizzy
2015-06-01 23:49:30 +08:00
@powergx
@awanabe 原来是这样,我之前也去了解过这两个方法,当时我以为只是测试的时候用。谢谢你们的解答。
elvis_w
2015-06-02 19:11:03 +08:00
@dizzy 本来就是测试用的,实际在使用当中应该用遍历器遍历的
user = User.query.all()
for u in users:
... print u.id,u.nickname,u.email

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX