如何使用 SQLAlchemy 从 Flask 中的 MySQL 数据库填充下拉菜单

问题描述 投票:0回答:1

我正在尝试创建一个从 MySQL 数据库获取其值的下拉列表,这是 main.py 文件中的数据库代码

db = SQLAlchemy()
DB_NAME = "base.db"

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'secret'
    app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:pass123@localhost/base'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

这是模型

class Vehicle(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    reg = db.Column(db.String(45), unique=True, nullable=False)
    brand = db.Column(db.String(45), nullable=False)
    color = db.Column(db.String(45))

下面也是html文件中的代码

 <div class="dropdown" name= vehicle method="GET" action="/" align="center">
                <button class="btn btn-primary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" >Vehicles
                <span class="caret"></span></button>
                <ul class="dropdown-menu" >
                    {% for row in vehicle %}
                        <li>
                            <option value="{{row[0]}}">{{row[1]}}</option>
                        </li>    
                            <li class="divider"></li>
                    {% endfor %}
                </ul>
            </div>

这是路线(我怀疑这是问题的根源)

@app.route('/')
def main():
    cur = MySQL(db).connect.cursor()
    cur.execute("SELECT * FROM Vehicle ORDER BY id")
    vehicle = cur.fetchall()
    return render_template('/', vehicle = vehicle)

下拉按钮在网页上显示正常,但是当我单击它时,会出现一个小的空白区域,这让我认为问题出在路由文件中,并且

vehicle = cur.fetchall()
是空的,即使我在数据库中添加了值

python mysql flask jinja2 flask-sqlalchemy
1个回答
0
投票

db 是 SQLAlchemy 对象, 尝试使用

vehicle = db.session.execute("SELECT * ...").fetchall()
© www.soinside.com 2019 - 2024. All rights reserved.