常用的SQLAlchemy字段类型:
类型名 | python中类型 | python中类型 |
---|---|---|
Integer | int | 普通整数,一般是32位 |
SmallInteger | int | 取值范围小的整数,一般是16位 |
BigInteger | int或long | 不限制精度的整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 普通整数,一般是32位 |
String | str | 变长字符串 |
Text | str | 变长字符串,对较长或不限长度的字符串做了优化 |
Unicode | unicode | 变长Unicode字符串 |
Unicode | Text | unicode |
Boolean | bool | 布尔值 |
Date | datetime.date | 时间 |
Time | datetime.datetime | 日期和时间 |
LargeBinary | str | 二进制文件 |
常用的SQLAlchemy列选项:
选项名 | 说明 |
---|---|
primary_key | 如果为True,代表表的主键 |
unique | 如果为True,代表这列不允许出现重复的值 |
index | 如果为True,为这列创建索引,提高查询效率 |
nullable | 如果为True,允许有空值,如果为False,不允许有空值 |
default | 为这列定义默认值 |
常用的SQLAlchemy关系选项:
选项名 | 说明 |
---|---|
backref | 在关系的另一模型中添加反向引用 |
primary join | 明确指定两个模型之间使用的联结条件 |
uselist | 如果为False,不使用列表,而使用标量值 |
order_by | 指定关系中记录的排序方式 |
secondary | 指定多对多中记录的排序方式 |
secondary join | 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件 |
上文将配置进行编写,配置如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
# sqlalchemy的配置参数
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/db_python"
#设置每次请求结束后会自动提交数据库中的改动,一般都设置手动保存
SQLALCHEMY_COMMIT_ON_TEARDOWN = False
# 设置sqlalchemy自动更新跟踪数据库
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 连接数据库
app.config.from_object(Config)
# 创建数据库aqlalchemy工具对象
db = SQLAlchemy(app)
@app.route("/")
def start():
return "This is the beginning"
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8000, debug=True)
这回将创建两个模型类,分别为用户类和用户角色类,两个类具有上下层的关系,即用户角色类为上层,用户类为下层,创建如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
# sqlalchemy的配置参数
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/db_python"
# 设置sqlalchemy自动更新跟踪数据库
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 连接数据库
app.config.from_object(Config)
# 创建数据库aqlalchemy工具对象
db = SQLAlchemy(app)
# 创建数据库模型类
class Role(db.Model):
"""用户角色/身份表"""
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True) # 整型的主键,会默认设置为自增主键
name = db.Column(db.String(32), unique=True)
# 创建数据库模型类
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)
passward = db.Column(db.String(128))
@app.route("/")
def start():
return "This is the beginning"
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8000, debug=True)
上述代码创建的两个类还未具有层级关系,让Role类(用户角色类)和User(用户类)能互相寻找需要建立两者的联系,如下:
# 创建数据库模型类
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)
passward = db.Column(db.String(128))
roid_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 使Role类和User类建立联系
让Role类(用户角色类)能往下找User(用户类),User(用户类)能往上找Role类(用户角色类),方法如下:
# 创建数据库模型类
class Role(db.Model):
"""用户角色/身份表"""
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True) # 整型的主键,会默认设置为自增主键
name = db.Column(db.String(32), unique=True)
users = db.relationship("User", backref="role") # 当role.users调用时,指明调用的是User的模型类;brakrefk可以用于反推,当user.role时,将上层对象进行打印
完整代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
# sqlalchemy的配置参数
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/db_python"
# 设置sqlalchemy自动更新跟踪数据库
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 连接数据库
app.config.from_object(Config)
# 创建数据库aqlalchemy工具对象
db = SQLAlchemy(app)
# 创建数据库模型类
class Role(db.Model):
"""用户角色/身份表"""
__tablename__ = "tbl_roles"
id = db.Column(db.Integer, primary_key=True) # 整型的主键,会默认设置为自增主键
name = db.Column(db.String(32), unique=True)
users = db.relationship("User", backref="role") # 当role.users调用时,指明调用的是User的模型类;brakrefk可以用于反推,当user.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)
passward = db.Column(db.String(128))
roid_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 使Role类和User类建立联系
@app.route("/")
def start():
return "This is the beginning"
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8000, debug=True)
以上就是Flask使用sqlalchemy创建模型类的基本方法,各位读者有疑问的可以私信博主或评论留下足迹。