import sqlalchemy
from MockServer import db
class Base:
id = db.Column(db.Integer, primary_key=True)
created_at = db.Column(db.DateTime, default=sqlalchemy.func.now(), nullable=False)
updated_at = db.Column(db.DateTime, default=sqlalchemy.func.now(), onupdate=sqlalchemy.func.now(), nullable=False)
# 添加一条数据
def save(self):
try:
db.session.add(self)
db.session.commit()
except BaseException:
db.session.rollback()
# 添加多条数据
def save_all(self, *args):
try:
db.session.add_all(args)
db.session.commit()
except BaseException:
db.session.rollback()
# 删除数据
def delete(self):
try:
db.session.delete(self)
db.session.commit()
except BaseException:
db.session.rollback()
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://USERNAME:PASSWORD@HOSTNAME/DB'
db = SQLAlchemy(app, model_class=Base)
##################################################################################
class Project(Base, db.Model):
name = db.Column(db.String(50), unique=True, nullable=False)
desc = db.Column(db.String(100))
api = db.relationship('Api', backref='project', cascade="all,delete")
### 只删除父级,子不影响
# api = db.relationship('Api', backref='project', passive_deletes=True)
### 子级跟随删除
# 2. api = db.relationship('Api', backref='project', cascade="all, delete-orphan")
# 3. api = db.relationship('Api', backref='project', cascade="all, delete")
## 父级删除,子级不删除,外键更新为 null
# 4. api = relationship("Api", backref = backref("child"))
def __init__(self, name='None', desc=''):
self.name = name
self.desc = desc
def __repr__(self):
return self.name + "......" + self.desc
class Api(Base, db.Model):
method = db.Column(db.String(10), nullable=False)
name = db.Column(db.String(50), nullable=False)
url = db.Column(db.String(100), nullable=False, unique=True)
body = db.Column(db.TEXT, nullable=False)
project_id = db.Column(db.Integer, db.ForeignKey('project.id'))
def __init__(self, method='', name='', url='', body='', project_id=1000):
self.method = method
self.name = name
self.url = url
self.body = body
self.project_id = project_id
def __repr__(self):
return self.name + "......" + self.url
if __name__ == '__main__':
db.create_all()
Project.create(name='ZhangTian',desc='')
Api.create(method='post',name='LiTian',url='',body='',project_id=1)
project= db.session.query(Project).first()
db.session.delete(project)
db.session.commit()
Flask Sqlalchemy 的级联删除配置
最新推荐文章于 2024-06-13 11:35:25 发布