前言
经测试,id主键默认自动增长,Stringl类型对应MySQL数据库中的varchar类型,外键默认没有触发方式。
设置数据库编码为uft8,则默认编码都为utf8。
示例
# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
class Config(object):
"""配置参数"""
# sqlalchemy的配置参数
# 数据库类型: mysql
# 用户名: root
# 密码: 123
# 地址: 127.0.0.1
# 端口: 3306
# 数据库: test2
SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/test2"
# 设置sqlalchemy自动跟踪数据库
SQLALCHEMY_TRACE_MODIFICATIONS = True
app.config.from_object(Config) #添加配置
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") # 非数据库中的字段,方便查询
def __repr__(self):
return "Role Object:name= %s" % self.name
class User(db.Model): #用户
__tablename__ = "tbl_users" # 表名
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(64))
email = db.Column(db.String(64), unique=True)
password = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id")) # 外键
def __repr__(self):
return "User Object:name= %s" % self.name
if __name__ == "__main__":
db.drop_all() # 清除数据库中的所有数据
db.create_all() # 创建数据库模型类中的所有表
role1 = Role(name="admin") # 添加数据
role2 = Role(name="stuff")
db.session.add_all([role1, role2])
db.session.commit()
user1 = User(name="a", email="[email protected]", password="abc", role_id=role1.id)
user2 = User(name="b", email="[email protected]", password="abc", role_id=role2.id)
user3 = User(name="c", email="[email protected]", password="abc", role_id=role2.id)
user4 = User(name="d", email="[email protected]", password="abc", role_id=role1.id)
db.session.add_all([user1, user2, user3, user4])
db.session.commit()
# 在终端操作数据库
# from dbdemo import *
# 查询
# r=Role.query.all()
# r[0],r[1]
# r[0].name,r[1].name
# u=User.query.get(3)
# u.name,u.email,u.role_id
# u=db.session.query(User).get(2)
# u.name
# user=User.query.get(1)
# user
# 更新方式1
# user.name="xm"
# db.session.add(user)
# db.session.commit()
# 更新方式2
# User.query.filter_by(name="c").update({"name":"python","email":"[email protected]"})
# db.session.commit()
# 删除
# user=User.query.get(2)
# db.session.delete(user)
# db.session.commit()
测试结果
数据库模型图
数据库表结构(部分)