1.项目结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200516211255451.png)
对表的基本操作可见链接
2. venv为虚拟环境(见博文)
3.多对多关系
- 多对多关系需要一个中间表关联
- 设置关联 tags = db.relationship(‘tag’,secondary=article_tag,backref=db.backref(‘articles’))
- 需要一个关键字参数 secondary = 中间表 来关联
- 访问和添加可以通过以下方式进行操作
以下通过文章,作者,文章_标记 三个表示例操作
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
article_tag = db.Table('article_tag',
db.Column('article_id',db.Integer,db.ForeignKey('article.id'),primary_key=True),
db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),primary_key=True)
)
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title = db.Column(db.String(100),nullable=False)
tags = db.relationship('tag',secondary=article_tag,backref=db.backref('articles'))
class tag(db.Model):
__tablename__ = 'tag'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(100),nullable=False)
db.create_all()
@app.route('/')
def hello_world():
article1 = Article(title='Python')
article2 = Article(title='Flask')
tag1 = tag(name='script language')
tag2 = tag(name='Python 框架')
article1.tags.append(tag1)
article2.tags.append(tag1)
article2.tags.append(tag2)
db.session.add(article1)
db.session.add(article2)
db.session.add(tag1)
db.session.add(tag2)
db.session.commit()
artile = Article.query.filter(Article.title == 'Flask').first()
tags = artile.tags
for tag in tags:
print(tag.name)
return 'Hello World!'
if __name__ == '__main__':
app.run()