我似乎无法使用此方法删除行。它运行没有错误,但行保留在db(mysql)中。我使用类似的方法添加和更新工作。
基本上,我创建了一个id列表(ParentPage.id)并将它们与临时表(ParentPageTemp.id)进行比较,目的是删除ParentPage中未在ParentPageTemp中找到的行。另外我在ParentPage和Page之间有一个关系,其中在删除ParentPage之后应删除Page中的行。不可否认,我对SQLAlchemy中关系的理解充其量只是新手。
models.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
views.py 中的方法
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
感谢。
答案 0 :(得分:0)
您在Page上有两个关系但在ParentPage中没有任何关系。
看看:http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#one-to-many
添加:
children = relationship("Page", backref='parent')
到ParentPage并删除您不需要它的页面上的页面关系。
修改强> 对不起,也许你想要你的关系一对一,它非常相似。 http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#one-to-one
答案 1 :(得分:0)
可能这就是你想要的:
1 - 添加relationship
属性并在backref
表中提及ParentPage
列,基本上此backref
将类似于Page
的添加属性模型,通过该模型,从Page
模型,您可以获得相应ParentPage
模型的Page
:
class ParentPage(Model):
__tablename__ = 'parent_page'
id = Column(Integer, primary_key=True)
url = Column(String(255))
pages = relationship('pages', backref='parentpage')
def __repr__(self):
this_id = str(self.id)
return this_id
2 - 在Page
模型中,仅指定foreignKey
到ParentPage
,如下所示:
class Page(Model):
__tablename__ = 'pages'
id = Column(Integer, primary_key=True) #Leave this as a primary key
parent_id = Column(Integer, ForeignKey('parent_page.id'))
type = Column(String(255))
# ...