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:是否设置为索引
创建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()