使用Flask SQLAlchemy将值更新到数据库中

时间:2015-11-16 02:40:55

标签: python flask sqlalchemy

我有3张桌子

models.py 中的

class Property(db.Model):
      id = db.Column(db.Integer, primary_key=True)
      agent_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
      agent = db.relationship('User')
      description = db.relationship('PropertyDescription',
          collection_class=attribute_mapped_collection('language')
)

      property_type_id = db.Column(db.Integer, db.ForeignKey('property_type.id'),                               nullable=False)
      sale_details = db.relationship('SaleDetails')
      property_type_id = db.Column(db.Integer, db.ForeignKey('property_type.id'),
                             nullable=False)
      property_type = db.relationship('PropertyType')
      sale_details_id = db.Column(db.Integer, db.ForeignKey('sale_details.id'))
      sale_details = db.relationship('SaleDetails')

      def save(self):
         super(Property, self).save()


 class PropertyDescription(db.Model):
     id = db.Column(db.Integer, primary_key=True)
     long_description = db.Column(db.Text, nullable=False)
     language = db.Column(db.Enum('de', 'en'), nullable=False)

     property_id = db.Column(db.Integer, db.ForeignKey('property.id'),
                        nullable=False)

class PropertyType(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    title = db.relationship(
    'PropertyTypeTitle',
       collection_class=attribute_mapped_collection('language')
)

class SaleDetails(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    price = db.Column(db.Integer, nullable=False)
在views.py

在form.validate_on_submit()上,如何将值插入所有表? 我想将数据插入到SaleDetails,PropertyDescription表中并获取它们的ID。并插入那些 将值输入到Property表中,并将Property的id插入PropertyDescription表。

我首先在property_obj中保存了属性,即Property Object。然后

 models.Property.save(property_obj)
 sales_obj = models.SaleDetails(price=form.sale_details.data)
 prop_desc_obj = models.PropertyDescription(long_description=form.property_description.data,
                                                    property_id=models.Property.id)
    db.session.add_all(property_obj, sales_obj, prop_desc_obj)
    db.session.commit()

但我觉得我错过了一些东西。使用此代码我得到的错误就像   '对象不像dict那样'

1 个答案:

答案 0 :(得分:1)

property()是一个内置的python函数。我建议不要遮蔽内置函数,因为它们可能会导致不稳定的行为。

另外,当models.Property.save(property_obj)类的小写字母为Property时,property正在使用大写字母P访问property_obj.save() sales_obj = models.SaleDetails(price=form.sale_details.data) prop_desc_obj = models.PropertyDescription(long_description=form.property_description.data, property_id=property_obj.id) db.session.add_all(property_obj, sales_obj, prop_desc_obj) db.session.commit()

cd zeppelin-web
mvn package -DskipTests