Python解释器在Flask教程

时间:2016-06-12 01:31:00

标签: python-2.7 flask

我正在做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版本上工作。任何帮助将不胜感激。提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,您的数据库工作正常,并在查询时获得正确的用户。什么不起作用的是用户对象如何将自己打印到控制台。

这由__repr__类中定义的User方法控制。你有一个拼写错误,你使用_repr_而不是__repr__(一个下划线而不是两个在repr的两边)。