大家好,我在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上面搜索也未果。请问下大家,我这里到底是哪出问题?谢谢。
1
billlee 2015-06-01 21:33:54 +08:00 1
这个不就是包含结果(两个 test.User 实例)的列表吗?
|
3
dizzy OP @billlee 我的意思是,按照文档中的描述,结果应该是[<User u'admin'>, <User u'guest'>]这样的。
|
4
jas0ndyq 2015-06-01 21:46:30 +08:00 1
i循环进去i.username
|
6
awanabe 2015-06-01 22:45:59 +08:00 1
@dizzy
class User 中增加一个 __repr__ 方法. 你想要的结果 return '<User %s>' % self. username 如果没有这个方法..就会打出 对象地址. 这个就是类似于Java中的toString方法 |
7
powergx 2015-06-01 22:47:13 +08:00 1
user class 又没有写 def __repr__ , 打印出来当然没有内容了
下面代码放进 user class 就能正确显示了 def __repr__(self): return '%s (%r, %r,%r)' % ( self.__class__.__name__, self.id, self.username,self. email) |
8
awanabe 2015-06-01 22:47:19 +08:00 1
@dizzy 你还可以试试 __str__() 这个方法...
去了解下 __str__() 和 __repr__() 的不同 |
10
elvis_w 2015-06-02 19:11:03 +08:00 1
|