1. SQLAlchemy是一个关系型数据库框架,
它提供了高层的ORM和底层的原生数据库的操作。
flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
2. 安装
环境 python3.6 + window10 + pycharm
pip install flask-sqlalchemy
pip install mysql-connector # 安装驱动 (不安装的话会报出警告)
如果用的虚拟环境,记得安装在虚拟环境当中
3. sqlalchemy的常用配置
(1) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:[email protected]:3306/test'
# 后面字符串的解释 mysql+mysqlconnector://用户名:密码@127.0.0.1:3306/数据库名
一般IP和端口都是 127.0.0.1:5000
( 2) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# True 让数据库里面的数据和模型数据库里面的数据保持一致
(3) #查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
4. 创建模型类:
模型类; 创建数据库模型类(继承 sqlalchemy 工具对象中的Model类),
一个模型类对应一张模型表
数据库表名的常见规范:
(1) 数据库名缩写_表名 (2) tbl_表名
创建模型类时常用的SQLAlchemy字段类型 :
创建模型类时常用的SQLAlchemy列选项 :
创建模型类时常用的SQLAlchemy关系选项:
5. 创建所有的表: db.drop_all()
删除所有的表: db.create_all()
注意: db是 db = SQLAlchemy(app) # 创建数据库 sqlalchemy 工具对象
6. 创建一个用户表和用户身份表,并做好设置,运行程序,没有报错 即创建成功,或者自己也可以在程序完成之后
print("创建成功"),,看下面的程序
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
'''sqlalchemy的配置参数'''
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:[email protected]:3306/db_python"
'''设置sqlalchemy自动跟踪数据库'''
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 设置参数
app.config.from_object(Config)
'''创建数据库 sqlalchemy 工具对象'''
db = SQLAlchemy(app)
"""
创建数据库模型类(继承 sqlalchemy 工具对象中的Model类),一个模型类对应一张模型表
数据库表名的常见规范:
(1) 数据库名缩写_表名 (2) tbl_表名
"""
class Role(db.Model):
"""用户身份表"""
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
'''
relationship()把两个表关联在一起,不添加也是可以的,根据自己的需求
backref : 在关系的另一模型中添加反向引用
相当于给要关联的表添加一个role属性
不添加也是可以的,根据自己的需求
'''
user = db.relationship("User", backref="role") # 从模型类中
class User(db.Model):
"""用户表"""
__tablename__ = "tbl_users" # 指明数据库的表名
id = db.Column(db.Integer, primary_key=True) # 整型的主键,会默认设置为自增主键
name = db.Column(db.String(64), unique=True)
email = db.Column(db.String(128), unique=True)
password = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 从底层中
if __name__ == '__main__':
'''清除数据库中的所有数据'''
db.drop_all()
'''创建所有表'''
db.create_all()
然后在数据库中,就可以看见,创建好的表,如下图:
这个就直接把模型类即模型表就创建好了