我正在做Miguel grinberg的烧瓶教程和第4步数据库。 http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database
在此步骤中,在playtime部分,当我从虚拟环境打开python解释器并输入添加用户的命令时:
>> from app import db,models
>> u= models.User(nickname='john', email='john2@gmail.com')
>> db.session.add(u)
>> db.session.commit()
现在要检索用户信息,我执行了以下操作:
>> users= models.User.query.all()
>> users
而不是返回[<User u'john'>]
我得到:
[<app.models.User object at 0xb74bd1ac>]
这似乎是我返回John的内存位置而不是实际名称。那么我做错了什么?有什么建议吗?
我的models.py代码:
from app import db
class User(db.Model):
id = db.Column(db.Integer,primary_key= True)
nickname = db.Column(db.String(64),index= True,unique= True)
email = db.Column(db.String(120),index= True,unique= True)
posts = db.relationship('Post',backref= 'author', lazy='dynamic')
def _repr_(self):
return '<User %r>'% (self.nickname)
class Post(db.Model):
id = db.Column(db.Integer, primary_key= True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def _repr_(self):
return '<Post %r>' % (self.body)
db_create.py的代码:
#!flask/bin/python
from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
import os.path
db.create_all()
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
else:
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO,
api.version(SQLALCHEMY_MIGRATE_REPO))
db_migrate.py的代码:
#!flask/bin/python
import imp
from migrate.versioning import api
from app import db
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
migration = SQLALCHEMY_MIGRATE_REPO + ('/versions/%03d_migration.py' % (v+1))
tmp_module = imp.new_module('old_model')
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
exec(old_model, tmp_module.__dict__)
script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI,
SQLALCHEMY_MIGRATE_REPO,
tmp_module.meta, db.metadata)
open(migration, "wt").write(script)
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
print('New migration saved as ' + migration)
print('Current database version: ' + str(v))
另外,为了澄清,我在本教程的所有4个部分中都遵循了所有步骤。在Ubuntu 16.04 vmware版本上工作。任何帮助将不胜感激。提前致谢!
答案 0 :(得分:2)
首先,您的数据库工作正常,并在查询时获得正确的用户。什么不起作用的是用户对象如何将自己打印到控制台。
这由__repr__
类中定义的User
方法控制。你有一个拼写错误,你使用_repr_
而不是__repr__
(一个下划线而不是两个在repr的两边)。