为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用数据库查询而不是烧瓶中的列表填充下拉框

如何使用数据库查询而不是烧瓶中的列表填充下拉框

阿晨1998 2022-11-01 17:12:42
这可能是一个非常简单的问题,但作为新手,我不得不在这里问抱歉,因为在玩了很多之后我还没有找到答案。我正在使用带有 python 食物类型列表的烧瓶,以允许用户将食物输入到表单中,并使用验证器对其进行验证,以确保该项目在列表中。然后将表单中输入的食物存储在数据库表中。我希望用来自预定义食物类型的数据库的 sql 查询替换此列表方法,同时使用 SQLAlchemy,因为它在应用程序的其他地方使用。代码的简化版本如下: -#db connection is already setup and working OK in another part of the appDB_URL = 'postgresql+psycopg2://{user}:{pw}@{url}:{port}/{db}'.format(user=POSTGRES_USER, pw=POSTGRES_PW, url=POSTGRES_URL, port=POSTGRES_PORT, db=POSTGRES_DB)app.config['SQLALCHEMY_DATABASE_URI'] = DB_URLdb = SQLAlchemy(app)#example of the listeaten = ['bread', 'crackers', 'ham', 'bacon']#where the 'food_word' variable gets defined from an input and validatedfood_word_1 = StringField('add the food type you have eaten here:', validators=[Optional(), AnyOf(eaten)])我尝试用eaten =  db.execute('SELECT food_name FROM food_type')(table & column) 替换列表,但没有成功。我不确定是否需要在 model.py 中为此 Select/GET 操作创建某种类/方法,或者甚至使用 pandas(我在应用程序中也有)之类的东西来完成这项工作。任何指导表示赞赏!
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

SQLAlchemy 是一个对象关系映射器。它有助于在没有 SQL 查询的情况下与数据库交互。它是对数据库的抽象。所以你不应该在这里写 SQL 查询。相反,您必须从 db.Model 创建一个继承的类。如下所示。


class FoodType(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    food_name = db.Column(db.String(120), unique=True, nullable=False)


def __repr__(self):

    return '<User %r>' % self.food_name

然后为了获取数据,你必须调用查询函数,


 db.query.all()

 # or

 db.query.filter_by()

结果将是一个列表。


如果你直接使用 postgres,而不使用 SQLAlchemy,那么 SQL 查询将是这样的,


>>> conn = psycopg2.connect(DATABASE_URL)

>>> cur = conn.cursor()

>>> cur.execute('SELECT food_name FROM food_type')

>>> cur.fetchall()

[['bread'], ['crackers'], ['ham'], ['bacon']]

如果要转换为单个列表,


eaten = [i[0] for i in db.fetchall()]


查看完整回答
反对 回复 2022-11-01
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信