我有两个属于一对多关系的模型。 查询|| ------ o< - Specialneed
我希望能够使用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 insert查询应如下所示:
SQL: 'INSERT INTO specialneed (description, iid) VALUES
(%(description)s, %(iid)s)'] [parameters:
{'description': 'Speaks English', 'iid': 11},
{'description': 'Can sing', 'iid': 11}]
我该如何管理呢?
答案 0 :(得分: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()
答案 1 :(得分:0)
我通过朋友找到了答案。 如果我改变这一部分:
'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。