Flask从表中获取所有产品并迭代它们

时间:2014-05-19 17:54:49

标签: python-2.7 flask sqlalchemy

我正在编写一个使用Flask作为后端的网站,我正在尝试将表中的所有产品添加到网页中。

我从未使用过SQLAlchemy或类似的东西,因此我不确定如何从数据库中获取所有产品,然后根据网站的需要对它们进行分类。

以下是我在views.py中使用的代码

@app.route('/products')
def products():
    product = [
        {
            'product_name': 'T-Shirts',
            'product_price': '18.00',
            'product_img': '',
            'product_description': 'A t-shirt.'
        },
        {
            'product_name': 'TShirts 2',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 3',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 4',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 5',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 6',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 7',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 8',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 9',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 10',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 11',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 12',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 13',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 14',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
        {
            'product_name': 'TShirts 15',
            'product_price': '25.00',
            'product_img': '',
            'product_description': 'A t-shirt, again.'
        },
    ]
    return render_template("products.html",
                           title="Products",
                           products = product)

以下是我模板中的代码(完美无缺):

{% extends "base.html" %}
{% block content %}
         <div class="row">
            <div class="large-4 small-12 columns">
                <img src="{{ url_for('static', filename='img/Straight_Up_Performance_Logo.png') }}">

                <div class="hide-for-small panel">
                    <h3>Straight Up Racing</h3>
                    <h5 class="subheader">Straight Up Racing believes that the best way to get in touch with our customers is for
                    them to call us. Give us a call at (406) 239-4975 to order yours today!
                    </h5>
                </div>
            </div>

            <div class="large-8 columns">
               <div class="row container1">
                   {% for product in products %}
                       <div class="large-4 small-4 columns">
                           <ul class="pricing-table">
                               {% if product.product_name %}<li class="title">{{ product.product_name }}</li>{% endif %}
                               {% if product.product_price %}<li class="price">${{ product.product_price }} + S&H</li>{% endif %}
                               {% if product.product_img %}<li class="bullet-item">{{ product.product_img }}</li>{% endif %}
                               {% if product.product_description %}<li class="description">{{ product.product_description }}</li>{% endif %}
                           </ul>
                       </div>
                   {% endfor %}
               </div>
            </div>
         </div>


{% endblock %}

以下是创建Product表的代码:

class Product(db.Model):
    product_id = db.Column(db.Integer, primary_key=True)
    product_name = db.Column(db.String(64), index = True)
    product_price = db.Column(db.Float, index=True)
    product_img = db.Column(db.String(200), index=True)
    product_description = db.Column(db.String(1000), index=True)

    def __repr__(self):
        return '<Product %r>' % (self.product_name)

我的问题不是为什么它目前没有从数据库中提取数据,我知道它正在使用我手动定义的内容。我不知道如何使用SQLAlchemy从数据库中删除它?

1 个答案:

答案 0 :(得分:5)

如果要显示所有产品,则需要SQLAlchemy的all方法。

@app.route('/products')
def products():
    products = Product.query.all()
    return render_template("products.html",
                           title="Products",
                           products=products)

如果您希望按某些字段进行过滤,则需要使用SQLAlchemy的filterfilter_by

products = Product.query.filter(Product.product_name == 'TShirts 11').all()

# or

products = Product.query.filter_by(product_name='TShirts 11').all()