在创建一个模型的时候,一旦生成一个表,就无法在模型中添加属性,此时的解决办法是,先在数据库中删除这张表drop tables article;
。然后重新运行。
1.外键:
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False)
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
content = db.Column(db.Text, nullable=False)
author = db.relationship('User',backref=db.backref('articles'))#正向与反向引用
2.author = db.relationship('User',backref=db.backref('articles'))
解释:
*给Article
这个模型添加一个author
属性,可以访问这篇文章的作者的数据,像访问普通模型一样。
*backref
是定义反向引用,可以通过User.articles
访问这个模型所写的所有文章。
db1.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
# class Article(db.Model):
# __tablename__ = 'article'
# id = db.Column(db.Integer,primary_key=True,autoincrement=True)
# title = db.Column(db.String(100),nullable=False)
# content = db.Column(db.Text,nullable=False)
#
# db.create_all()
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(100),nullable=False)
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
content = db.Column(db.Text, nullable=False)
author = db.relationship('User',backref=db.backref('articles'))#正向与反向引用
db.create_all()
@app.route('/')
def hello_world():
#添加一个用户
# user1 = User(username='xww')
# db.session.add(user1)
# db.session.commit()
# 添加一个文章
# article = Article(title='aaa',content='bbb',author_id=1)
# db.session.add(article)
# db.session.commit()
# 找文章标题为aaa的作者
# article = Article.query.filter(Article.title=='aaa').first()
# author_id = article.author_id
# user = User.query.filter(User.id==author_id).first()
# print(user.username)
# 正向与反向引用
#查找作者为xww的所有文章
# article.author
# author = User.query.filter(User.name == 'xww').first()
# author.articles
# article = Article(title='aaa', content='bbb')
# article.author = User.query.filter(User.id==1).first()
# db.session.add(article)
# db.session.commit()
# 找文章标题为aaa的作者
# article = Article.query.filter(Article.title == 'aaa').first()
# print(article.author.username)
# 查找作者为xww的所有文章
# article = Article(title='111',content='222',author_id=1)
# db.session.add(article)
# db.session.commit()
user = User.query.filter(User.username == 'xww').first()
result = user.articles
for article in result:
print('-'*10)
print(article.title)
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)