【问题标题】:Insert into one to many relationship with multiple data sqlalchemy flask插入与多个数据 sqlalchemy 瓶的一对多关系
【发布时间】:2017-05-23 10:17:46
【问题描述】:

我有两个处于一对多关系的模型。 询价||-----o

我希望能够通过使用 Flask SQLalchemy 中构造的关系在 Specialneed 中插入多条记录。

我可以在 Specialneed 中插入 1 条记录,如下所示:

applicationParams={
        'startdate': request.form['startdate'],
        'enddate':  request.form['enddate'],
        'starttime': request.form['starttime'],
        'endtime': request.form['endtime'],
        'budget': request.form['budget'],
        'specialneed': [SpecialNeed(description=request.form['specialNeeds'])]}

但是当我尝试为“specialneed”参数提供表单中输入的特殊需求列表时,它给了我错误:

(pymysql.err.InternalError) (1241, 'Operand should contain 1 column(s)') 
[SQL: 'INSERT INTO specialneed (description, iid) VALUES 
    (%(description)s, %(iid)s)'] [parameters: 
        {'description': ['Speaks English', 'Can sing'], 'iid': 11}]

当我给它一个列表时,它在我的代码中看起来像这样:

applicationParams={
        'startdate': request.form['startdate'],
        'enddate':  request.form['enddate'],
        'starttime': request.form['starttime'],
        'endtime': request.form['endtime'],
        'budget': request.form['budget'],
        'specialneed': [SpecialNeed(description=[sn.strip() for sn in request.form['specialNeeds'].split('.')])]}

sql 插入查询应该如下所示才能成功:

SQL: 'INSERT INTO specialneed (description, iid) VALUES 
(%(description)s, %(iid)s)'] [parameters: 
      {'description': 'Speaks English', 'iid': 11}, 
      {'description': 'Can sing', 'iid': 11}]

我应该如何管理它?

【问题讨论】:

    标签: python mysql flask sqlalchemy


    【解决方案1】:

    模型是

       class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')
        usermobilenumber = db.Column(db.String(100, collation='NOCASE'), nullable=False, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')
        roles = db.relationship('UserRoles')
    
    class UserRoles(db.Model):
        __tablename__ = 'user_roles'
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))
    

    通过 for 循环迭代请求值并附加它。

             @app.route('/usercreation', methods=['POST','GET'])
             def usercreation():
               if request.method == 'POST':
                 usermobilenumber = request.form['mobilenumber']
                 userpassword = request.form['password']
    
                 # roless is a list(many values)
                 roless = request.form.getlist('roles')
    
                 user = User(username=usermobilenumber,password = 
                        generate_password_hash(userpassword))
    
                 #append list values into model object
                 for r in roless:
                   role = UserRoles(role_id=r)
                   user.roles.append(role)
    
                 db.session.add(user)
                 db.session.commit()
    

    【讨论】:

      【解决方案2】:

      我通过朋友找到了答案。 如果我改变这部分:

      'specialneed': [SpecialNeed(description=[sn.strip() for sn in request.form['specialNeeds'].split('.')])]
      

      到这里:

      'specialneed': [SpecialNeed(description=sn.strip()) for sn in reuqest.form['specialNeeds'].split(".")]
      

      它会起作用的。 查看this site 了解有关列表推导的更多信息。

      【讨论】:

        猜你喜欢
        • 2021-06-03
        • 2016-04-04
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        • 2019-04-10
        • 2016-06-18
        • 2012-06-14
        • 2014-11-02
        相关资源
        最近更新 更多