外键

插入数据

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(30), nullable=False)

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(30), nullable=False)
    content = db.Column(db.Text, nullable=False)
    # 外键列数据类型必须和要引用的列保持一致,表名.列名
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    # 将Article和User关系起来,通过名为author关系,可以让Article模型中的数据结果,直接获取到User模型中对应的数据
    author = db.relationship('User', backref=db.backref('articles'))

db.create_all()

@app.route('/')
def index():
    # 创建用户
    user1 = User(username='LotusChing')
    db.session.add(user1)
    db.session.commit()
    # 创建文章
    article1 = Article(title='a', content='a1', author_id=1)
    db.session.add(article1)
    db.session.commit()
    return 'Index.'

if __name__ == '__main__':
    app.run()

通过外键获取引用数据(正向引用)

查找文章标题为a的作者

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(30), nullable=False)

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(30), nullable=False)
    content = db.Column(db.Text, nullable=False)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', backref=db.backref('articles'))
db.create_all()

@app.route('/')
def index():
    #   笨办法
    # article1 = Article.query.filter(Article.title == 'a').first()
    # author_id = article1.author_id
    # user1 = User.query.filter(User.id == author_id).first()
    # print(user1.username)

    #   好办法
    article1 = Article.query.filter(Article.title == 'a').first()
    #   创建模型时定义了Article和User的关系,所以通过名为article的关系名,获取到了对应的User数据对象
    print('Username: {}'.format(article1.author.username))

    return 'Index.'

if __name__ == '__main__':
    app.run()

反向引用

查找LotusChing写过的所有文章

@app.route('/')
def index():
    user1 = User.query.filter(User.username == 'LotusChing').first()
    user_articles = user1.articles
    print('Article Count: {}'.format(len(user_articles)))
    for a in user_articles:
        print('Title: {} Content: {} Author: {}'.format(a.title, a.content, a.author.username))
    return 'Index.'

results matching ""

    No results matching ""