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

这可能是一个非常简单的问题,但作为新手,我不得不在这里问抱歉,因为在玩了很多之后我还没有找到答案。


我正在使用带有 python 食物类型列表的烧瓶,以允许用户将食物输入到表单中,并使用验证器对其进行验证,以确保该项目在列表中。然后将表单中输入的食物存储在数据库表中。


我希望用来自预定义食物类型的数据库的 sql 查询替换此列表方法,同时使用 SQLAlchemy,因为它在应用程序的其他地方使用。


代码的简化版本如下: -


#db connection is already setup and working OK in another part of the app

DB_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_URL

db = SQLAlchemy(app)


#example of the list

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


#where the 'food_word' variable gets defined from an input and validated

food_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(我在应用程序中也有)之类的东西来完成这项工作。


任何指导表示赞赏!



阿晨1998
浏览 139回答 1
1回答

繁星点点滴滴

SQLAlchemy 是一个对象关系映射器。它有助于在没有 SQL 查询的情况下与数据库交互。它是对数据库的抽象。所以你不应该在这里写 SQL 查询。相反,您必须从 db.Model 创建一个继承的类。如下所示。class FoodType(db.Model):&nbsp; &nbsp; id = db.Column(db.Integer, primary_key=True)&nbsp; &nbsp; food_name = db.Column(db.String(120), unique=True, nullable=False)def __repr__(self):&nbsp; &nbsp; return '<User %r>' % self.food_name然后为了获取数据,你必须调用查询函数,&nbsp;db.query.all()&nbsp;# or&nbsp;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()]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python