簡體   English   中英

Flask-SLAlchemy session.add()和session.commit()不起作用

[英]Flask-SLAlchemy session.add() and session.commit() don't work

我有一個嘗試添加數據庫的heroku應用程序。 我正在使用Flask-SLAlchemy,PostgreSQL(和psql)。 我已經在數據庫中創建了一個表,但是無法向其中添加任何行。 我認為這是所有相關的代碼:

import flask
import keys
import requests_oauthlib
import json
import os
import psycopg2
import urlparse
from flask import (Flask, jsonify, render_template, redirect, url_for, request, make_response)
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'heroku-url-here'
db = SQLAlchemy(app)

class Page (db.Model):
    __tablename__ = "pages"
    title = db.Column('Title', db.String)
    date = db.Column('Date', db.String, primary_key=True)
    writing = db.Column('Writing', db.String)

    def __init__(self, title, date, writing):
        self.title = title
        self.date = date
        self.writing = writing

    def __repr__(self):
        return '<Page %r>' % self.date


app.secret_key = keys.secret_key
# db.create_all()
# this created the database already after I ran it once, it made a psycopg2 error after that first time.

@app.route('/db', methods=['GET', 'POST'])
def db():
    if request.method == 'POST':
        title = request.form['title']
        date = request.form['date']
        writing = request.form['writing']
        newest = Page(title, date, writing)
        print newest
        db.session.add(newest)
        db.session.commit()
    else:
        title = None
        date = None
        writing = None
    return flask.redirect(flask.url_for('home'))

在我的heroku日志中,沒有顯示任何錯誤。 代碼運行到最新打印行,新創建的Page被打印為<Page u'whatever-the-date-was'> 在我的html模板中提交表單時,它通過使用操作{{url_for('db')}}來調用該函數。

這是我第一次使用heroku和flask,基本上是在做任何后端工作,因此,如果有答案,請徹底解釋。 提前致謝!

在這里利用您的Page模型。

db.session.add(Page(
    title = request.form['title']
    date = request.form['date']
    writing = request.form['writing']
    ))
db.session.commit()

您可能還會遇到條件查詢的麻煩-如果該方法不是POST,那么將不會發生任何事情,並且不會記錄任何有關此消息的消息。 如果您從路由聲明中的方法中刪除“ GET”,則完全不需要該條件。

我建議您看一下Flask-WTF擴展,以及進行表單驗證並將步驟重定向到單獨的函數中。 Flask通過將元素分解為最小的可用組件,然后以許多不同的方式重新組裝它們,從而發揮了最佳效果。

有關表單處理的更多信息,請查看Miguel Grinberg的Flask Mega-Tutorial (如果尚未安裝)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM