一、安装flask-sqlalchemy
pipenv install flask-sqlalchemy
补充下:
下边配置选项中用到数据库驱动,我用的是cymsql,所以需要下载cymysql数据库驱动
pipenv install cymysql
二、配置选项
在配置文件中,为链接mysql数据库做必须的配置
# 数据库连接配置,必须的,格式为(数据库+数据库驱动://数据库用户名:密码@数据库主机地址:端口号/数据库名称)
my_config={
"MYSQL":"mysql",
"CYMSQL":"cymysql",
"ACCOUNT":"root",
"PASSWORD":123456,
"ADDRESS":"localhost",
"PORT":3306,
"DATABASENAME":"test"
}
SQLALCHEMY_DATABASE_URI = "{MYSQL}+{CYMSQL}://{ACCOUNT}:{PASSWORD}@{ADDRESS}:{PORT}/{DATABASENAME}".format(**my_config)
SQLALCHEMY_TRACK_MODIFICATIONS = True #为True时,flask-sqlalchemy会跟踪对象的修改
选项 | 说明 |
---|---|
SQLALCHEMY_DATABASE_URI | 用于连接的数据库 URI 。例如 mysql+cymysql://root:123@localhost:3306/test |
SQLALCHEMY_TRACK_MODIFICATIONS = True | 为True时,flask-sqlalchemy会跟踪对象的修改 |
三、初始化
from flask import Flask
from flask_sqlalchemy import SQLAlchemy # 引入SQLAlchemy类
app = Flask(__name__)
app.config.from_object('setting.my_config') # 引入数据库连接配置(我的是在setting文件夹下的my_comfig配置文件中)
db = SQLAlchemy(app) #实例化 SQLAlchemy,创建一个数据库实例,为下边模型提供一个基类,以及一些辅助类、辅助函数,可用于定义模型的结构
四、创建模型
# db.Model 创建模型
# db.Column 创建模型属性
class Book(db.Model): # 让Book 继承基类的模型
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(20),nullable=False)
userpassword = db.Column(db.String(20),nullable=False)
# Integer 整数类型
# primary_key 是否为主键
# autoincrement 是否递增
# String 字符串类型
# nullable 是否允许为空
常见的一些模型属性类型:
类型名 | Python类型 | 说明 |
---|---|---|
Integer | int | 普通整数,一般是 32 位 |
SmallInteger | int | 取值范围小的整数,一般是 16 位 |
Big Integer | int 或 long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 定点数 |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长 Unicode 字符串 |
Unicode Text | unicode | 变长 Unicode 字符串,对较长或不限长度的字符串做了优化 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期 |
Time | datetime.time | 时间 |
DateTime | datetime.datetime | 日期和时间 |
Interval | datetime.timedelta | 时间间隔 |
Enum | str | 一组字符串 |
PickleType | 任何 Python 对象 | 自动使用 Pickle 序列化 |
LargeBinary | str | 二进制文件 |
常见的SQLAlchemy列(Column)中的选项:
选项名 | 说明 |
---|---|
primary_key | 如果设为 True,这列就是表的主键( 通常我们会把id定义为主键,并且是autoincrement=True递增模式 ) |
unique | 如果设为 True,这列不允许出现重复的值 |
index | 如果设为 True,为这列创建索引,提升查询效率 |
nullable | 如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值 |
default | 为这列定义默认值 |
autoincrement | 如果设为 True,表示递增模式 |
五、把创建的模型映射到数据库中去
# 把创建的模型映射到执行数据库中去,这样就ok了,此刻,
# 刷新数据库,会看到上边的数据表已经成功映射到mysql数据库中了!!!
db.create_all(app=app)
六、下边是一个完整的是例子
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('setting.my_config')
db = SQLAlchemy(app)
class Book(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(20),nullable=False)
userpassword = db.Column(db.String(20),nullable=False)
db.create_all(app=app)
# 配置文件 setting/my_comfig.py
DEBUG=True
my_config={
"MYSQL":"mysql",
"CYMSQL":"cymysql",
"ACCOUNT":"root",
"PASSWORD":123456,
"ADDRESS":"localhost",
"PORT":3306,
"DATABASENAME":"test"
}
SQLALCHEMY_DATABASE_URI = "{MYSQL}+{CYMSQL}://{ACCOUNT}:{PASSWORD}@{ADDRESS}:{PORT}/{DATABASENAME}".format(**my_config)
SQLALCHEMY_TRACK_MODIFICATIONS = True
我在补充下:
最近最项目,使用flask-sqlalchemy创建数据库表的时候老是创建失败,总结主要两点原因:
1、在Navicat中,连接Mysql数据库时要指定一个连接名,连接成功之后,在名字中右键新建一个数据库,这个数据库的名字要跟配置文件中的名字对应!!!
2、配置文件一定要放在 db.create_all(app=app) 之前!!!
下边本想继续记录操作数据库的一些方法,但是文章有点长,下一篇文章详细记录下 数据库的增删改查。。。