【问题标题】:Passing different form data entries to the same row in a database with Python Flask and SQLAlchemy使用 Python Flask 和 SQLAlchemy 将不同的表单数据条目传递到数据库中的同一行
【发布时间】:2020-10-04 20:35:20
【问题描述】:

我创建了一个包含用户名和电子邮件地址的表单。我从表单中获取这些数据并通过以下方式将其放入 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|||||||||

问题:如何更改代码以获得理想的结果?

【问题讨论】:

    标签: python sqlite flask-sqlalchemy flask-wtforms


    【解决方案1】:

    假设您的模型中有一个 User 类,如下所示:

    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()
                 
    

    【讨论】:

    • 感谢您的解决方案。我会考虑将其用于教育目的并作为替代方案。
    【解决方案2】:

    我找到的解决方案:

    我融合了:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多