python - 在一列中将 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]>
,如何将带有值的整个表单传递给数据库列?
解决方案
推荐阅读
- javascript - 显示在线弹出聊天可用性状态
- c# - 无键实体类型 - EF Core 仍检查主键
- amazon-web-services - AWS FIFO Queues with lambda – 每个消息组一个并发 lambda
- php - PHP SQL 选择在哪里和
- mysql - 为什么mysql解释使用索引显示比int列更喜欢bigint列
- javascript - 如何使用 JS 和 HTML5 每隔几秒将数字添加到起始值数字
- javascript - 从变量中获取承诺数据的正确方法是什么?
- javascript - HTML 自动幻灯片
- ldap - UnboundID LDAP SDK 是否支持 LDAP 通道绑定和 LDAP 签名?
- java - 实例的左侧和右侧到底是什么意思