首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个数据sqlalchemy flask插入到一对多关系中

问使用多个数据sqlalchemy flask插入到一对多关系中
EN

Stack Overflow用户
提问于 2017-05-23 18:17:46
回答 2查看 1.1K关注 0票数 1

我有两个模型,它们是一对多关系。查询||-o<--特殊需要

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

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

代码语言:javascript
复制
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’-参数一个在表单中输入的特殊需求的列表时,它给出了错误:

代码语言:javascript
复制
(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}]

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

代码语言:javascript
复制
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 insert查询应如下所示才能成功:

代码语言:javascript
复制
SQL: 'INSERT INTO specialneed (description, iid) VALUES 
(%(description)s, %(iid)s)'] [parameters: 
      {'description': 'Speaks English', 'iid': 11}, 
      {'description': 'Can sing', 'iid': 11}]

我该怎么管理它呢?

EN

回答 2

Stack Overflow用户

发布于 2020-02-07 15:56:44

模型包括

代码语言:javascript
复制
   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循环迭代请求值并追加它。

代码语言:javascript
复制
         @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()
票数 1
EN

Stack Overflow用户

发布于 2017-05-23 18:43:33

我通过一个朋友找到了答案。如果我更改此部分:

代码语言:javascript
复制
'specialneed': [SpecialNeed(description=[sn.strip() for sn in request.form['specialNeeds'].split('.')])]

要这样做:

代码语言:javascript
复制
'specialneed': [SpecialNeed(description=sn.strip()) for sn in reuqest.form['specialNeeds'].split(".")]

看起来不错。有关列表理解的更多信息,请查看this site。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44132007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档