访问对象值

时间:2018-06-07 18:15:33

标签: python python-3.x flask-sqlalchemy

我正在尝试创建基于Flask,SQLAlchemy和Jinja2的Web应用程序,但在使用SQLAlchemy进行连接时无法获得对象值。例如,我的models.py中有2个这样的对象:

def user:
    id = dbcolumn (integer )
    username =dbcolumn (varchar(whatever))
    local_id = dbcolumn(integer)

def local:
    id = dbcolumn (integer )
    local_name =dbcolumn (varchar(whatever))   

在我的routes.py文件中,如果我这样做:

    qry = User.query.filter(id=1)
    usertoshow = qry.first()
    print(usertoshow)
    ...
    return render_template('editaruser.html', form=form, user=userupd)

打印结果将返回<User James>之类的内容。如果我想用Jinja在HTML中显示结果,我只需{{ user.username }}并且数据显示正确,但我需要进行多次连接以收集我需要的所有数据。例如,当我做一个像:

这样的连接时
    qry = db.session.query(User, Local).join(Local, (Local.id==User.user_local_id))
    print(qry)
    userupd = qry.first()
    print(userupd)

print(qry)中返回的查询是

    SELECT user.id AS user_id, user.username AS user_username, user.user_nome AS user_user_nome, user.email AS user_email, user.password_hash AS user_password_hash, user.user_local_id AS user_user_local_id, user.user_terapeuta_id AS user_user_terapeuta_id, user.user_date_crea AS user_user_date_crea, user.user_created_by AS user_user_created_by, user.user_last_login AS user_user_last_login, user.user_activo AS user_user_activo, local.id AS local_id, local.local_nome AS local_local_nome
    FROM user INNER JOIN local ON local.id = user.user_local_id

并且第二次打印的结果是

(<User Jamesdean>, <Local Somewhere in the world>)  

我以为我正在创建某种可以在Jinja2中调用的对象,如:

    <td>Username:</td><td>{{ user.username }} {{ user.local_nome }}</td>

但是这返回为空并且没有返回错误,只有一个空格,在我进行连接之前曾经是一个用户名。

如何从此处显示的查询中检索数据:(<User Jamesdean>, <Local Somewhere in the world>)

1 个答案:

答案 0 :(得分:0)

刚刚找到它。您需要引用所需的数据类型,在我的情况下,它应该是{{user.User.username}} {{user.Local.local_name}}。