2016-06-12 15 views
-1

我在做Miguel grinberg的瓶教程和第4步數據庫。 http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-databasePython解釋器在Flask教程中沒有正確返回用戶信息

在此步驟中,在播放時間段,當我打開從命令虛擬env和類型Python解釋器將用戶添加:

>> from app import db,models 
>> u= models.User(nickname='john', email='[email protected]') 
>> db.session.add(u) 
>> db.session.commit() 

我們獲取用戶信息,我做了以下:

>> users= models.User.query.all() 
>> users 

和,而不是返回[<User u'john'>]我越來越:

[<app.models.User object at 0xb74bd1ac>] 

這似乎是我返回約翰的記憶位置,而不是實際的名稱。那麼我做錯了什麼?任何建議?

我的models.py代碼:爲db_create.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) 

代碼:

#!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)) 

另外要澄清,我有:用於db_migrate.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)) 

代碼在本教程的所有4個部分中遵循所有步驟。在Ubuntu 16.04 vmware版本中使用它。任何幫助將不勝感激。提前致謝!

回答

2

首先,你的數據庫工作正常,並且當你查詢它時你得到了正確的用戶。不起作用的是用戶對象如何將自己打印到控制檯。

這由User類中定義的__repr__方法控制。你在那裏有一個錯字,你使用_repr_而不是__repr__(一個underbar,而不是repr每邊兩個)。

+0

糟糕!這很愚蠢。感謝@Miguel偉大的教程。學習堆。 –