Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用flask wtf queryselectfield进行更具体的SQL查询_Python_Flask_Flask Sqlalchemy_Flask Wtforms - Fatal编程技术网

Python 使用flask wtf queryselectfield进行更具体的SQL查询

Python 使用flask wtf queryselectfield进行更具体的SQL查询,python,flask,flask-sqlalchemy,flask-wtforms,Python,Flask,Flask Sqlalchemy,Flask Wtforms,我想使用Flask和WTF创建一个登录表单。应用程序应该从数据库表中读取所有用户的昵称,并将其显示在QuerySelectField中 它确实有效——但我认为我可以用一种“更好的方式” 我有这样一个数据库表: id | nickname | fullname | email ----+-----------+----------------+-------------------------- 1 | Admin | The Admin |

我想使用Flask和WTF创建一个登录表单。应用程序应该从数据库表中读取所有用户的昵称,并将其显示在QuerySelectField中

它确实有效——但我认为我可以用一种“更好的方式”

我有这样一个数据库表:

 id | nickname  |    fullname    |          email
----+-----------+----------------+--------------------------
  1 | Admin     | The Admin      | admin@example.com
  2 | JDoe      | John Doe       | jd@example.com
在mymodels.py中,我有相应的类User和函数getUser:

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)
    fullname = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)

    def __repr__(self):
        return '<User %r>' % (self.nickname)

# used for query_factory    
def getUser():
    u = User.query
    return u
正如我所说,所有昵称都很好地出现在我的QuerySelectField中

<select id="user" name="user"><option value="1">Admin</option><option value="2">JDoe</option></select>
看起来整个表都被返回了,我也收到了不必要的数据(全名和电子邮件)。 这就是我想要避免的

如何仅查询User.id和User.昵称并将其显示在QuerySelectField中? (当然,我做了研究——我尝试了按或User.query(User.id,User.昵称)筛选,但只得到了关于不匹配元组的错误)

有人能帮忙吗

提前谢谢


mycket不确定您使用的是哪个版本的SQLAlchemy,但是从
0.9.0
开始,有一个版本可以用于轻松返回查询的列子集

您可以将
getUser()
修改为如下内容:

从functools导入部分
从sqlalchemy导入orm
def getUser(列=无):
u=User.query
如果列:
u=u.选项(仅限格式加载(*列))
返回u
def getUserFactory(列=无):
返回部分(getUser,columns=columns)
#随后在定义LoginForm时
user=QuerySelectField(u'user',
query_factory=getUserFactory(['id','昵称]]),
获取_label='昵称')

这就是我要找的!谢谢!
<select id="user" name="user"><option value="1">Admin</option><option value="2">JDoe</option></select>
INFO sqlalchemy.engine.base.Engine SELECT "user".id AS user_id, "user".nickname AS user_nickname, "user".fullname AS user_fullname, "user".email AS user_email
FROM "user"