(学习flask) 04 使用flask-sqlalchemy

flask使用数据库

这里使用SQLAlchemy关系型数据库框架管理数据库

pip install flask-sqlalchemy

数据库引擎URLMySQLmysql://username:password@hostname/databaseSQLitesqlite:///abspath

1.配置数据库

  • 其中,数据库URL必须存储在SQLALCHEMY_DATABASE_URI键中
  • SQLALCHEMY_COMMIT_ON_TEARDOWN,意为在析构时执行提交操作,即每次请求后都会自动提交数据库中的变动
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

basedir=os.path.abspath(os.path.dirname(__file__))
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
db=SQLAlchemy(app)

2.定义模型

  • 在ORM中,模型一般指的是一个python类,类中的属性对应了数据库表中的类
  • 下面__tablename__是一个内建的属性,用来定义在数据库中,存放该模型的表的表名
  • Column方法的第一个形参指定了数据库中字段的数据类型,第二个形参指定了对字段的约束
  • 最后调用的__repr__方法,返回了一个具有可读性的字符串表示模型,方便调试
class Role(db.Model):
    __tablename__='roles'
    id=db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64), unique=True)

    def __repr__(self):
        return ''%self.name

class User(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(64), unique=True)

    def __repr__(self):
        return ''%self.username

3.定义关系

修改模型的定义

  • relationship方法的第一个参数表明这个关系的另一端是哪个模型,可以使用字符串指定。第二个参数 backref向User模型中添加一个role属性,用来定义反向的关系
  • 同时在User模型中指定了外键 role_id,对应Role模型中的主键 id字段
class Role(db.Model):
    ...
    users=db.relationship('User',backref='role')
    def __repr__(self):
        return ''%self.name

class User(db.Model):
    ...

    role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))
    def __repr__(self):
        return ''%self.username

4.命令行新建表并插入数据

  • 这里的db就是上面定义的 db=SQLAlchemy(app)
  • 最后必须commit才会生效
>from dbtest import db
>db.create_all()
>admin_role=Role(name='Admin')
>user_role = Role(name='USer')
>user_john=User(username='john',role=admin_role)
>user_alex = User(username='alex', role=user_role)
>db.session.add(admin_role)
>db.session.add(user_role)
>db.session.add(user_john)
>db.session.add(user_alex)
>db.session.commit()

5.修改静态页面

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}dbtest{% endblock %}

{% block content %}
    <div class="page_header">
        <h1>hello,{% if name %}{{name}}{% else %}Stanger{% endif %}!h1>
        {% if not known %}
        <p>幸会幸会!p>
        {% else %}
        <p>很高兴再会!p>
        {% endif %}
    div>
{{wtf.quick_form(form)}}
{% endblock %}

6.执行效果

(学习flask) 04 使用flask-sqlalchemy

Original: https://blog.csdn.net/akswyh/article/details/124166102
Author: akswyh
Title: (学习flask) 04 使用flask-sqlalchemy

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/749329/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球