Flask学习记录之Flask-SQLAlchemy,Flask-Migrate

Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令.

Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作.

一.配置Flask-SQLAlchemy

程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALchemy支持多种数据库,配置格式如下:

  Postgres:

  postgresql://scott:[email protected]/mydatabase

  MySQL:

  mysql://scott:[email protected]/mydatabase

  Oracle:

  oracle://scott:[email protected]:1521/sidname

  SQLite:

  sqlite:////absolute/path/to/foo.db

db是SQLALchemy类的实例,表示程序使用的数据库,为用户提供Flask-SQLALchemy的所有功能

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
#配置数据库地址
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:////tmp/test.db‘
#该配置为True,则每次请求结束都会自动commit数据库的变动
app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True
db = SQLAlchemy(app)
#也可以db = SQLAlchemy()        db.init_app(app)

二.定义模型

Flask-SQLALchemy使用继承至db.Model的类来定义模型,如:

class User(db.Model, UserMixin):#UserMixin是Flask-Login库中所需要的
    __tablename__ = ‘users‘
    #每个属性定义一个字段
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(64),unique=True)    password = db.Column(db.String(64))
    def __repr__(self):
        return ‘<User %r>‘ % self.username

定义完需要在Python Shell中导入db,调用db.create_all()来创建数据库

(1)常用字段选项:

  primary_key 设置主键

  unique 是否唯一

  index 是否创建索引

  nullable 是否允许为空

  default 设置默认值,可以传入函数的引用 如传入 datetime.datetime.utcnow 则每次创建时时间都是最新时间

三.增删查改

(1) 插入数据:

from app.models import User
from app import db

#创建一个新用户
u = User()
u.username = ‘abc‘
u.password = ‘abc‘
#将用户添加到数据库会话中
db.session.add(u)
#将数据库会话中的变动提交到数据库中,如果不Commit,数据库中是没有改动的
db.commit()

(2)查找数据:

#返回所有用户保存到list中
user_list = User.query.all()

#查找username为abc的第一个用户,返回用户实例
u = User.query.filter_by(username=‘abc‘).first()

#模糊查找用户名以c结尾的所有用户
user_list  = User.query.filter(username.endswith(‘c‘)).all()

#查找用户名不是abc的用户
u = User.query.filter(username != ‘abc‘).first()

(3)删除数据:

user = User.query.first()
db.session.delete(user)
db.session.commit()

(4)修改数据:

u = User.query.first()
u.username = ‘sb‘
db.session.commit()

四.一对多关系

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    #在多的一边使用relationship定义,backref将在Address表中创建个名为persons的Person引用,之后可以使用address.persons访问这个地址的所有人
    addresses = db.relationship(‘Address‘, backref=‘persons‘,
                                lazy=‘dynamic‘)

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    #在一的一边使用db.ForeignKey声明外键
    person_id = db.Column(db.Integer, db.ForeignKey(‘person.id‘))

一.配置Flask-Migrate

from flask.ext.migrate import Migrate, MigrateCommand

migrate = Migrate(app,db)
#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例

manager.add_command(‘db‘, MigrateCommand)
#manaer 是Flask-Script的实例,这条语句在flask-script 中添加一个db命令

二.使用Flask-Migrate

在命令提示行中

输入python manager.py db init 来创建迁移仓库,

输入python manager.py db migrate -m ‘initial migration‘来创建迁移脚本, 在数据库结构有变动后创建迁移脚本

输入python manager.py db upgrade 来更新数据库

时间: 2024-10-29 19:07:36

Flask学习记录之Flask-SQLAlchemy,Flask-Migrate的相关文章

[ZHUAN]Flask学习记录之Flask-SQLAlchemy

From: http://www.cnblogs.com/agmcs/p/4445583.html Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALch

Flask学习记录之Flask-Admin

相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可以通过修改模板文件来定制管理页面. 初始化: from flask import Flask from flask_admin import Admin app = Flask(__name__) admin = Admin(app) # Add administrative views here

Flask学习记录之Flask-Mail

Flask-Mail可以连接到配置中的SMTP服务器,进行邮件发送,如果没有进行SMTP服务器的配置,将会默认连接到localhost上的 一.配置及初始化 (1)flask应用配置 #配置选项 MAIL_SERVER = 'smtp.qq.com' #邮件服务器 MAIL_PORT = 25 #端口 MAIL_USE_TLS = False#传输层安全协议 MAIL_USE_SSL = False #安全套接层协议 MAIL_USERNAME = 'you' #账号 MAIL_PASSWORD

Flask学习记录

Flask是一个使用Python编写的轻量级web框架,相比其他框架如Django更加简单易学.本文将实现一个简单示例,完成以下功能:从数据库中读取用户信息,在浏览器中分页展示,添加分页导航栏,并且实现根据用户名搜索.用到的主要知识点:数据库操作.表单.Jinja2模板. 学习环境搭建 操作系统 CentOS Linux release 7.4.1708 (Core) 执行yum update -y然后重启系统,确保软件包处于最新状态. Python版本 2.7.5 安装Python虚拟环境 利

Flask学习记录之Flask-Migrate

一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例 manager.add_command('db', MigrateCommand) #manaer 是Flask-Script的实例,这条语句在flask-script 中添加一个db命令 二.使用Flask-Migrate 在

Flask学习记录之MarkDown编辑文本

为了让网页支持markdown编辑文本,使用如下了4个库 PageDown : 在前端提供一个可以实时将markdown内容转换成html文本进行效果预览的编辑器 Flask-PageDown: 这个库将PageDown集成到Flask-Wtf库中,更方便使用 MarkDown: 将MarkDown标记文本转换为Html文本 Bleach: 基于白名单清除Html文本中不安全的标签 PageDown的使用 和其他类库相识,需要初始化 from flask.ext.pagedown import

Flask学习记录之Flask-Moment

Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数.另外,它也支持多种语言,你可以任意新增一种 新的语言包. Flask-Moment是一个集成moment.js到Jinja2模板的Flask扩展. 一.初始化Flask-Moment from flask.ext.moment im

Flask学习记录之使用Werkzeug散列密码

数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,method...)函数将原始密码作为输入,以字符串形式输出密码的散列值 check_password_hash(hash,password)函数检查给出的hash密码与明文密码是否相符 应用在用户模型中 from werkzeug.security import check_password_hash,ge

Flask学习笔记-No module named flask.ext.wtf

1 from flask.ext.wtf import Form 2 from wtforms import StringField,BooleanField 3 from wtforms.validators import DataRequired 4 5 class LoginForm(Form): 6 openid = StringField('openid',validators=[DataRequired()]) 7 remember_me = BooleanField('rememb