SQLAlchemy外键约束

在创建一个模型的时候,一旦生成一个表,就无法在模型中添加属性,此时的解决办法是,先在数据库中删除这张表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)

猜你喜欢

转载自blog.csdn.net/hellosweet1/article/details/80171371
今日推荐