このメソッドを使用して行を削除することはできません。エラーなく実行されますが、行はdb(mysql)に残ります。同様のアプローチを使用して追加と更新を行っています。SQLAlchemy/Flask-SQLAlchemyで行を削除することはできません
基本的には、ParentPageTempにはないParentPage内の行を削除する意図で、ids(ParentPage.id)のリストを作成し、それらを一時テーブル(ParentPageTemp.id)と比較しています。追加私はParentPageとページの関係を持っています.ParentPageの削除に続いて、そのページの行を削除する必要があります。確かに、SQLAlchemyでの関係の私の理解は、最高で初心者です。
models.py views.pyで
class ParentPage(Model):
__tablename__ = 'parent_page'
id = Column(Integer, primary_key=True)
url = Column(String(255))
def __repr__(self):
this_id = str(self.id)
return this_id
class Page(Model):
__tablename__ = 'pages'
id = Column(Integer, ForeignKey('parent_page.id'), primary_key=True)
parent_id = Column(Integer, ForeignKey('parent_page.id'))
type = Column(String(255))
default_code = Column(String(255))
name = Column(String(255))
header = Column(String(255))
title = Column(String(255))
keywords = Column(String(255))
description = Column((Text))
priority = Column(String(255))
list_price = Column((Float))
standard_price = Column((Float))
image_filename = Column((Text))
image_alt_text = Column(String(255))
pdf_filename = Column((Text))
lastupdate = Column(Date)
page = relationship('ParentPage', foreign_keys=[id], backref='page')
parent = relationship('ParentPage', foreign_keys=[parent_id], backref='children')
def __repr__(self):
return self.name
方法
def delete_temp_not_in_test():
parent_test_ids = db.session.query(ParentPage.id).all()
print "parent in test - %s" % (parent_test_ids)
for item in parent_test_ids:
q = db.session.query(ParentPageTemp).get(item)
if q is None:
print "ID doesnt exist - %s" % (item)
db.session.query(Page).filter(Page.id==item).delete(synchronize_session='fetch')
db.session.query(ParentPage).filter(ParentPage.id==item).delete(synchronize_session='fetch')
db.session.commit()
print "%s deleted from Temp" % (item)
# return False
else:
print "ID is %s" % (q.id)
# return True
return
感謝。
ご協力ありがとうございます。次のように
foreignKey
〜ParentPage
と指定してください。残念ながら私はエラーが発生しています: " アプリケーションをインポートできませんでしたエラー:関係の親/子テーブル間の結合条件を判断できませんでしたParentPage.page - テーブルをリンクする複数の外部キーパスがあります 'foreign_keys'引数親テーブルへの外部キー参照を含むものとしてカウントされる列のリストを提供します。 "私はPagesに関係"子 "を追加します。 – geoffn