python连接池interfaceerror_python – 错误消息:InterfaceError:

将两个表链接在一起并尝试创建一个带有外键的表单.

sqlalchemy.exc.InterfaceError

InterfaceError:不可打印的InterfaceError对象

数据库链接完成为:

class Client(db.Model):

__tablename__ = 'Client'

..

stand_id = db.Column(db.String(10), index = True, unique = True)

stands = db.relationship('Stand', backref= 'Stand', lazy='select')

def __init__(self,client_name,contact_number,contact_name,contact_email,stand_id):

self.client_name = client_name

self.contact_number = contact_number

self.contact_email = contact_email

self.contact_name = contact_name

self.stand_id = stand_id

class Stand(db.Model):

__tablename__ = 'Stand'

..

stand_number = db.Column(db.String(10), db.ForeignKey('Client.stand_id' ))

def __repr__(self):

return '' % (self.stand_id)

def __init__(self, stand_name,items, quantity,install_date,

derig_date,comments,last_update, stand_number):

self.stand_name = stand_name

self.items = items

self.quantity = quantity

self.install_date = install_date

self.derig_date = derig_date

self.comments = comments

self.last_update = last_update

self.stand_number = stand_number

形式为

class StandForm(Form):

stand_name = TextField('stand_name', validators = [Required()])

items = TextAreaField('items', validators = [Required()])

quantity = TextAreaField('quantity', validators = [Required()])

install_date = TextField('install_date',validators = [Required()])

derig_date = TextField('derig_date', validators = [Required()])

comments = TextField('comments', validators = [Required()])

last_update = TextField('last_update', validators = [Required()])

stand_number = QuerySelectField(query_factory=lambda: Client.query.all())

并查看为

@app.route('/newstand', methods = ['GET','POST'])

def newstand():

form = StandForm()

if form.validate():

stand = Stand(

request.form['stand_name'], request.form['items'], request.form['quantity'],

request.form['install_date'],request.form['derig_date'], request.form['comments'],

request.form['last_update'], request.form['stand_number'])

form.populate_obj(stand)

db.session.add(stand)

db.session.commit()

return render_template('liststands.html',

stand = stand,

form=form)

else:

flash("Your form contained errors")

return render_template('newstand.html', form = form

我不认为我写的功能很正确,任何意见/帮助?

最佳答案 我刚遇到同样的错误,看起来它可能是一个类似的问题.

QuerySelectField返回完整的对象,而不仅仅是ID.对于上面的例子:

重命名表单字段以反映其包含的内容:

class StandForm(Form):

...

stand = QuerySelectField(query_factory=lambda: Client.query.all())

在视图中构造对象时使用ID:

@app.route('/newstand', methods = ['GET','POST'])

def newstand():

form = StandForm()

if form.validate():

stand = Stand(

request.form['stand_name'], request.form['items'], request.form['quantity'],

request.form['install_date'],request.form['derig_date'], request.form['comments'],

request.form['last_update'], request.form['stand'].stand_id)

...

此外,上面的示例是显式构造具有表单内容的Stand对象,并再次通过调用form.populate_obj,这可能是多余的(它将再次填充对象上的所有相同字段),因此其中一个可能是除去.

如果form.populate_obj自动尊重外键(我认为它确实存在,但我还没有尝试过),那么您可以将视图代码简化为:

@app.route('/newstand', methods = ['GET','POST'])

def newstand():

form = StandForm()

if form.validate():

stand = Stand()

form.populate_obj(stand)

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值