二:flask_sqlalchemy 对数据库进行基本操作

时间:2022-02-12 07:52:23

安装好flask及的基本开发环境后(之前一篇的博客里有说明),本篇开始将使用flask里常用的一些扩展组件编写一些测试代码,本篇主要列举写flask_sqlalchemy的演示案例
环境:win7,python2.7,flask,flask_sqlalchemy,mysql
IDE:pycharm
1、MysqlTool.py 主要是数据库连接的代码

  #!/usr/bin/python
# -*- coding: UTF-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
#配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:root123456@localhost/my_blog'
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
#该配置为True,则每次请求结束都会自动commit数据库的变动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =True
db = SQLAlchemy(app)
#也可以db = SQLAlchemy() db.init_app(app)

2.MysqModel.py - ORM模型

from MysqlTool import  db
from flask_login import UserMixin

#角色
class Role(db.Model):
__tablename__ ='roles'
id = db.Column(db.Integer,primary_key=True)
role_name = db.Column(db.String(64),unique=True)
users = db.relationship('User',backref = 'role')


def __repr__(self):
return '<Role %r>' % self.role_name

#定义模型 Flask-SQLALchemy使用继承至db.Model的类来定义模型,如:
class User(db.Model,UserMixin):
__tablename__ = 'users'
#每个属性定义一个字段
id = db.Column(db.Integer,primary_key=True)
user_name = db.Column(db.String(64),unique=True)
pass_word = db.Column(db.String(64))
email = db.Column(db.String(64))
phone = db.Column(db.String(64))
role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))

def __repr__(self):
return '<User %r>' % self.user_name

3、创建表或者删除表

#创建数据库
db.create_all()
#删除库
db.drop_all()

4、日入数据示列

from db.MysqlTool import db
from db.MysqModel import User,Role

#添加数据
admin_role = Role(role_name = 'Amdmin')
mod_role = Role(role_name = 'Moderator')
user_role = Role(role_name = 'User')
user_john = User(user_name = 'john',role = admin_role)
user_susan = User(user_name='susan', role=user_role)
user_david = User(user_name='david', role=user_role)

db.session.add_all([admin_role, mod_role, user_role,
user_john, user_susan, user_david])
#提交事务
db.session.commit()

5、修改数据示列

from db.MysqlTool import db
from db.MysqModel import User,Role

#根据条件查询一行数据
admin_role = Role.query.filter_by(role_name = 'Amdmin').first()
#修改数据-
admin_role.role_name = 'Admin'
db.session.add(admin_role)
db.session.commit()
print admin_role.role_name

6、删除数据示列

from db.MysqlTool import db
from db.MysqModel import User,Role

#根据条件查询一行数据
admin_role = Role.query.filter_by(role_name = 'Admin').first()
#删除
db.session.delete(admin_role)
db.session.commit()

7、查询数据示列

from db.MysqlTool import db
from db.MysqModel import User,Role

#带条件查询
user_role = Role.query.filter_by(role_name = 'User').first()
#查询所有
print Role.query.all()

print User.query.filter_by(role= user_role).all()

基本操作就到这里,更多的案例,可看官方API文档