2016-06-07 69 views
0

我有這個模型瓶返回的查詢

class Social(db.Model): 
__tablename__ = 'social_auth_usersocialauth' 
id = db.Column('id',db.Integer, primary_key=True) 
provider = db.Column('provider',db.String(32)) 
extra_data = db.Column('extra_data',db.String()) 
uid = db.Column('uid',db.String(255)) 

def __init__(self,id=None, provider=None, extra_data=None, uid=None): 
    self.id = id 
    self.provider = provider 
    self.extra_data = extra_data 
    self.uid = uid 
def __repr__(self): 
    return '<Social %r>' % self.uid 

那麼這裏是我的功能

test = Social.query.filter(Social.uid == current_user) 

,當我得到的觀點是這樣{{測試}}

我得到它的查詢,我想得到結果,我該怎麼做? 這裏是我現在看到的結果:

SELECT social_auth_usersocialauth.id AS social_auth_usersocialauth_id, social_auth_usersocialauth.provider AS social_auth_usersocialauth_provider, social_auth_usersocialauth.extra_data AS social_auth_usersocialauth_extra_data, social_auth_usersocialauth.uid AS social_auth_usersocialauth_uid FROM social_auth_usersocialauth WHERE social_auth_usersocialauth.uid = :uid_1 
+0

該模型只是它的一部分我的模型文件:) – Zezen

+0

難道你不需要在查詢結尾添加'.first()'嗎? – coralvanda

+0

我想得到所有與它相同的電子郵件,我使用社交認證,所以用戶可以有超過1個電子郵件分貝,,,所以我加.all() – Zezen

回答

0

你有兩個問題。我們先從錯誤開始。

在您的查詢中,您將uid字段與當前用戶進行比較。假設Social是你的用戶模型,您的查詢應包括

Social.query.filter(Social.uid == current_user.uid) 

你的另一個問題是如何訪問查詢的結果。諸如filterfilter_by的方法返回BaseQueryhttp://flask-sqlalchemy.pocoo.org/2.1/api/#flask.ext.sqlalchemy.BaseQuery)。 BaseQuery對象有幾種方法根據您的需要公開結果。在這種情況下,您聽起來像是allhttp://flask-sqlalchemy.pocoo.org/2.1/api/#flask.ext.sqlalchemy.BaseQuery.all)。

把所有這些組合起來,你在你的模板得到

test = Social.query.filter(Social.uid == current_user.uid).all() 

一次,你可能會想遍歷test而不僅僅是直接呼應吧。

{% for user in test %} 
    {{ user }} 
{% endfor %} 

如果您還沒有定義Social.__str__,輸出將不會是非常有用的,但這應該足以讓你在正確的方向前進。

+0

謝謝,dirn,它很清楚,希望我的問題很快就會得到解決...... :) – Zezen

+0

哎喲,順便說一句,我有這個錯誤 ProgrammingError:(psycopg2.ProgrammingError)無法適應類型 'LocalProxy'[SQL:「SELECT social_auth_usersocialauth.id AS social_auth_usersocialauth_id,social_auth_usersocialauth.provider AS social_auth_usersocialauth_provider,social_auth_usersocialauth.extra_data AS social_auth_usersocialauth_extra_data,social_auth_usersocialauth.uid AS social_auth_usersocialauth_uid \ n從social_auth_usersocialauth \ nWHERE social_auth_usersocialauth .uid =%(uid_1)s'] [參數:{'uid_1':[email protected]}] – Zezen

+0

我的答案的第一部分解決了這個問題。您無法將模型實例與字符串字段進行比較。您需要比較一個字符串(例如'Social.uid')。 – dirn