如何在数据库中的一列中获取和存储2个值? Python Flask SQLAlchemy

时间:2018-05-16 13:18:36

标签: python html database flask sqlalchemy

我试图在一列中存储2个值,我不知道它是否可能。

看起来像那样。我从HTML表单中获取数据,如下所示。它有效。

<form action="{{url_for('newBook')}}" method = 'POST'>
    <p>Choose Language</p>
        <select name=language method="GET" action="/" size="2" multiple> 
        {% for language in languages %}
        <option value= "{{language}}" SELECTED>{{ language }}</option>"
        {% endfor %}
        </select>
    <p><input type='submit' value='Create'></p>
    <a href = "{{url_for('showBooks') }}">Cancel</a>
</form>

但它只在数据库中存储了一个值。

class Book(Base):
    __tablename__ = 'Book'
    language = Column(String(30)) # how change that?

这就是我获得这个价值的方式。

languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
    if request.method == 'POST':
        newBook = Book(language = request.form['language']) # how change that?
        session.add(newBook)
        session.commit()
        flash("New Book Added!")
        return redirect(url_for('showBooks'))
    else:
        return render_template('newBook.html', languages=languages)

该代码有效,但我只获得英语或波兰语价值。但我希望我能存储两个值。我知道可以使用request.form.getlist,但我没有找到一个有效的例子,以及如何将它存储在数据库中。

1 个答案:

答案 0 :(得分:0)

要从select元素中检索多个值,您可以将代码更改为:

languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
    if request.method == 'POST':
        newBooks = request.form.getlist('language') # this returns a list of values
        session.add(newBook)
        session.commit()
        flash("New Book Added!")
        return redirect(url_for('showBooks'))
    else:
        return render_template('newBook.html', languages=languages)

至于将它们存储在数据库中,您可以创建另一个存储语言的表,并使用外键链接回Book表。