首页 > 解决方案 > 在一列中将 HTML 请求表单发送到数据库 - flask sqlalchemy

问题描述

我正在创建一个 Web 表单来捕获用户数据并将其存储到我们的数据库中。已经创建了网络表单并使用烧瓶将数据存储到我们的 postgres 数据库中。我能够解析请求表单并将值存储到各个列中,这是我的代码。

from flask import Flask, render_template, request, redirect, url_for, session, flash
from flask import Markup
import sys,os
from functools import wraps
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.secret_key = os.urandom(24)

USER = os.environ['USER']
PASSWORD = os.environ['PASSWORD']
HOST_NAME = 'servername'
DB_NAME = 'dbname'
DB_SCHEMA = 'dl_schema'
DB_TABLE = 'update_dummytable'

SQLALCHEMY_DATABASE_URI = "postgresql://{username}:{password}@{hostname}:5432/{databasename}".format(
username=USER,
password=PASSWORD,
hostname=HOST_NAME,
databasename=DB_NAME)

app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
db = SQLAlchemy(app)

class FormTable(db.Model):

    __table_args__ = {'schema': DB_SCHEMA , 'implicit_returning': False}
    __tablename__ = DB_TABLE

    cid = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String())
    last_name = db.Column(db.String())
    user_email = db.Column(db.String())
    policy_number = db.Column(db.String())
    formvalue = db.Column(db.String())
    form = db.Column(db.Text())

@app.route('/formupdate', methods=['GET', 'POST'])
def transactions():
    if request.method == 'GET':
        return render_template('index.html')
    updaterequest = FormTable(first_name=request.form["first_name"], 
last_name=request.form["last_name"], \
    user_email=request.form["user_email"], policy_number=request.form["policy_number"], \
    formvalue=request.form["formvalue"], form= request)
    db.session.add(updaterequest)
    db.session.commit()
    return render_template('index.html')

@app.route("/")
def home():
  return "Form Update App"

if __name__ == "__main__":
  app.run(debug=True)

上面的代码工作正常,但我也试图将整个请求表单与用户提供的值作为 html 存储在我在 postgres 数据库中的一个列中,我在我的表中创建了一个名为“form”的列作为文本数据类型。但是如何将整个 html 与该列中的值一起存储?当我传递“request.form”时,它传递的是带有键值的字典,而不是 html 表单。此外,当我尝试将“请求”传递给该列时,它会引发此错误,sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'LocalProxy'我可以看到插入查询有 'form': <Request 'http://127.0.0.1:5000/formupdate' [POST]>,如何将带有值的整个表单传递给数据库列?

标签: pythonhtmlpostgresqlflaskflask-sqlalchemy

解决方案


推荐阅读