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 = 'aa_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)



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"))  # 表名+字段名
    users=db.relationship('User',backref=db.backref('articles'),uselist=False)


@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=3)

    db.session.add(article1)
    db.session.add(article2)
    db.session.add(article3)


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

    article=Article.query.filter(Article.id==2).first()#获取
    user=article.users     #获取article对象的users属性
    print(user.username)   #打印输出用户名
    return "查询数据成功"
if __name__ == '__main__':
    app.run(debug=True)

 最后给亲爱的小伙伴分享一下Flask学习必备资料,点击下面链接可取: 

flask英文文档:https://flask.palletsprojects.com/en/1.1.x/
flask中文文档:https://dormousehole.readthedocs.io/en/1.1.2/
jinja2英文文档:https://jinja.palletsprojects.com/en/3.0.x/
flask-bootstrap中文文档:https://flask-bootstrap-zh.readthedocs.io/zh/latest/
bootstrap3组件文档:https://v3.bootcss.com/components/

宝宝们,喜欢的点赞支持一下,谢谢宝宝们啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值