[英]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.