Flask-数据库一对多关系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 数据库配置
USERNAME = 'root'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'zz_flask'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOST,
                                                                                             PORT, DATABASE)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 动态跟踪修改设置,如果未设置会弹出警告
app.config['SQLALCHEMY_ECHO'] = True  # 查询时会显示原始的sql语句
db = SQLAlchemy(app)  # 创建实例,读配置参数,将和数据库相关的配置加载到SQLAlchemy对象中



# 一对一的关系,relationship用在一,外键用在多
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(200), nullable=False)
    # 简历relationship属性方法,建立模型关系,第一个参数为多方模型的类名,添加backref可以实现多对一的反向查询
    acles = db.relationship("Article", backref="users")  # 一个人发表多篇文章


class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)
    # 外键设置:外键的数据类型应参考引用的字段类型
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))  # 表名+字段名


@app.route('/createtable')
def create_table():
    db.create_all()
    return "创建表成功"


# 删除表
@app.route('/droptable')
def droptable():
    db.drop_all()
    return '删除表成功'


@app.route('/add')
def add():
    # 添加两条用户信息
    user1 = User(username="赵景潮")
    user2 = User(username="刘强东")
    user3 = User(username="黄一凡")
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(user3)

    # 添加三条文章信息
    article1 = Article(title="西游记", content="三打白骨精", author_id=1)
    article2 = Article(title="水浒传", content="武松打虎", author_id=2)
    article3 = Article(title="三国演义", content="桃园三结义", author_id=2)
    article4 = Article(title="白蛇", content="白素贞", author_id=3)
    db.session.add(article1)
    db.session.add(article2)
    db.session.add(article3)
    db.session.add(article4)

    db.session.commit()
    return "添加成功"
@app.route('/sel2')
def sel2():
    user=User.query.filter(User.id==2).first()  #查询符合条件的记录
    article=user.acles     #取得user对象的所有acticle属性
    print(article)
    for k in article:      #遍历整个article
        print(k)           #打印输出
        print(k.title)     #打印输出标题
    
    return "查询成功"

if __name__ == '__main__':
    app.run(debug=True)
    #encoding:utf-8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值