ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便,因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。

一、初始化

from flask_sqlalchemy import SQLAlchemy  
app = Flask(__name__)
app.config.from_config(config)
db = SQLAlchemy(app)

其中,config为配置文件

SQLALCHEMY_DATABASE_URI = ('mysql+pymysql://'+MYSQL['user']+':'+MYSQL['password']+'@'+MYSQL['host']+'/'+MYSQL['db'])
SQLALCHEMY_POOL_SIZE = 1
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = os.environ.get('SECRET_KEY') or '10086'

二、db对象产生之后,使用db对象创建模型与表的映射。

模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型。
数据类型:
db.Integer代表的是整形.
db.String代表的是varchar,需要指定最长的长度.
db.Text代表的是text.
其他参数:
primary_key:代表的是将这个字段设置为主键。
autoincrement:代表的是这个主键为自增长的。
nullable:代表的是这个字段是否为空,默认可以为空,可以将这个值设置为False,在数据库中,这个值就不能为空了。
index:是否设置为索引

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

创建User类,作为博客用户。

class User(db.Model):
    __tablename__ = 'usertable' #如果不指定表名,会默认以这个类名的小写为表名
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), index=True, unique=True)
    email = db.Column(db.String(255), index=True, unique=True)
    password = db.Column(db.String(32))
    permission = db.Column(db.Integer())
    accept_email = db.Column(db.Boolean(), default=False)
    register_time = db.Column(db.DateTime())
    def __repr__(self): # 方便查看打印输出结果
        return '<User {}>'.format(self.name)

    def set_password(self, password): # 生成密码
        self.password = generate_password_hash(password)

    def check_password(self, password): # 检查密码
        return check_password_hash(self.password, password)

三、增、删、改、查

#根据用户名查找.filter_by 表内部精确查询
 user = User.query.filter_by(name=username).first()
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄