使用 Python Flask 和 SQLAlchemy 将不同的表单数据条目传递到数据库中的同一行
Passing different form data entries to the same row in a database with Python Flask and SQLAlchemy
我创建了一个表单,其中包含用户名和他们的电子邮件地址。我从表单中获取这些数据并按以下方式将其放入 sqlite3 数据库中:
@app.route('/my_form', methods=["GET", "POST"])
def form_data():
if request.method == "POST":
user_name = request.form["name"]
new_user = form_database(name=user_name)
user_email = request.form["email"]
new_user_email = form_database(email=user_email)
try:
db.session.add(new_user)
db.session.add(new_user_email)
db.session.commit()
return redirect("/my_form")
当前结果:每个数据条目都记录到一个新行中:
1|Jack||||||||||
2||svisto@hotmail.com|||||||||
理想结果:每个数据条目都记录到同一行中:
1|Jack|svisto@hotmail.com|||||||||
问题:如何更改代码以获得理想的结果?
假设您的模型中有一个用户 class,如下所示:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,
primary_key=True)
username = db.Column(db.String(32),
index=False,
unique=True,
nullable=False)
email = db.Column(db.String(64),
index=True,
unique=True,
nullable=False)
然后你可以在你的 try 块中这样做
try:
new_user = User(user_name=user_name,
email=email)
db.session.add(new_user)
db.session.commit()
我找到的解决方案:
我融合了:
new_user = form_database(name=user_name) and new_user_email = form_database(email=user_email)
在一起使得代码看起来像这样:
@app.route('/my_form', methods=["GET", "POST"])
def form_data():
if request.method == "POST":
user_name = request.form["name"]
user_email = request.form["email"]
new_user_details = form_database(name=user_name, email=user_email)#assigns 2 form inputs for both columns in the database model to the same variable
try:
db.session.add(new_user_details)#adds that variable to the database as one entry, hence in one row but different columns
db.session.commit()
我创建了一个表单,其中包含用户名和他们的电子邮件地址。我从表单中获取这些数据并按以下方式将其放入 sqlite3 数据库中:
@app.route('/my_form', methods=["GET", "POST"])
def form_data():
if request.method == "POST":
user_name = request.form["name"]
new_user = form_database(name=user_name)
user_email = request.form["email"]
new_user_email = form_database(email=user_email)
try:
db.session.add(new_user)
db.session.add(new_user_email)
db.session.commit()
return redirect("/my_form")
当前结果:每个数据条目都记录到一个新行中:
1|Jack||||||||||
2||svisto@hotmail.com|||||||||
理想结果:每个数据条目都记录到同一行中:
1|Jack|svisto@hotmail.com|||||||||
问题:如何更改代码以获得理想的结果?
假设您的模型中有一个用户 class,如下所示:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,
primary_key=True)
username = db.Column(db.String(32),
index=False,
unique=True,
nullable=False)
email = db.Column(db.String(64),
index=True,
unique=True,
nullable=False)
然后你可以在你的 try 块中这样做
try:
new_user = User(user_name=user_name,
email=email)
db.session.add(new_user)
db.session.commit()
我找到的解决方案:
我融合了:
new_user = form_database(name=user_name) and new_user_email = form_database(email=user_email)
在一起使得代码看起来像这样:
@app.route('/my_form', methods=["GET", "POST"])
def form_data():
if request.method == "POST":
user_name = request.form["name"]
user_email = request.form["email"]
new_user_details = form_database(name=user_name, email=user_email)#assigns 2 form inputs for both columns in the database model to the same variable
try:
db.session.add(new_user_details)#adds that variable to the database as one entry, hence in one row but different columns
db.session.commit()