Flask-SQLAlchemy的使用

Flask-SQLAlchemy的使用

  • 1、创建数据库
create  database flask_mysql charset utf8
  • 2、配置数据库信息
DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = 'root'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_sql'
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
  • 3、主文件app配置
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
  • 4、初始化 flask-sqlalchemy
from flask import Flask
import config
from flask_sqlalchemy import  SQLAlchemy
  • 5、创建数据库表
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
class Article(db.Model):
 __tablename__ = 'article'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True)
 # nullable=False 不能为空
title = db.Column(db.String(32),nullable=False)
content = db.Column(db.Text,nullable=False)
  • 6、测试数据库是否连接成功 注:程序运行没有报错表示正常的
db.create_all()
from flask import Flask
import config
from flask_sqlalchemy import  SQLAlchemy
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    # nullable=False 不能为空
    title = db.Column(db.String(32),nullable=False)
    content = db.Column(db.Text,nullable=False)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String,nullable=False)
    # nullable=False 不能为空
    title = db.Column(db.String(32),nullable=False)
    content = db.Column(db.Text,nullable=False)
db.drop_all()
db.create_all()
@app.route('/')
def index():
    return 'Hello World'
if __name__ == '__main__':
    app.run(debug=True)
  • 7、数据库增删查
  • 1)增加
 art = Article(title='aaa',content='bbb')
   db.session.add(art)
   db.session.commit()
  • 2)查询
 art = Article.query.filter().first()
    print(art.title)
    print(art.content)
  • 3)修改
  art.title = 'ccc'
  db.session.commit()
  • 4)删除
db.session.delete(art)
db.session.commit()

增删改查

  • flask-SQLAlchemy外键及其关系
    在这里插入图片描述

Flask数据库迁移操作步骤

  • 项目结构
    flask数据库迁移项目目录结构
  • 1、app主文件配置


from flask import Flask,render_template,request
import config


app = Flask(__name__)
app.config.from_object(config)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()
  • 2、config文件配置 注:不可变
#encoding: utf-8
import os
DEBUG = True

SECRET_KEY = os.urandom(24)

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'list'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
  • 3、exts文件配置
# -*- coding: utf-8 -*-
# @Author  : 张江峰
# @Time    : 2018/10/16 11:47
# @E-Mail : jiangfengzh365@163.com
# @File    : exts.py
# @Software: PyCharm
from  flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
  • 4 、manage文件配置
# -*- coding: utf-8 -*-

from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from exts import db
from apps import app

from models import User

manage = Manager(app)

migrate = Migrate(app,db)


manage.add_command('db',MigrateCommand)



if __name__ == "__main__":
    manage.run()
  • 5、models文件配置
# -*- coding: utf-8 -*-
# @Author  : 张江峰
# @Time    : 2018/10/16 11:48
# @E-Mail : jiangfengzh365@163.com
# @File    : models.py
# @Software: PyCharm

from exts import db

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    telephone = db.Column(db.String(11),nullable=False)
    username = db.Column(db.String(100),nullable=False)
    password = db.Column(db.String(100),nullable=False)

flask_migrate相关的命令 (执行数据库迁移)

  • 初始化一个迁移脚本的环境,只需要执行一次
python manage.py db init
  • 将模型生成迁移文件,只要模型更改了,就需要执行一遍这个命令
python manage.py db migrate
  • 将迁移文件真正的映射到数据库中。每次运行了migrate命令后,就记得要运行这个命令
python manage.py db upgrade

装饰器

  • 1、装饰器使用是通过@符号,放在函数的上面
  • 2、装饰器中定义的函数,要使用 *args,**kwargs 两对兄弟组合\
  • 3、为了不改变装饰下函数的——name——属性 需要增加 {from functools import wraps}
from functools import wraps
def my_log(fun):
    @wraps(fun)
    def wrapper(*args,**kwargs):
        print 'hello world'
        fun(*args,**kwargs)
    return wrapper
    
@my_log
def run():
    print 'run'
run()
# 打印函数参数的名字
print run.__name__
@my_log
def add(a ,b):
    c = a+b
    print u'计算结果是 %s' % c
Flask-SQLAlchemy 是一个用于在 Flask使用 SQLAlchemy 的工具,而 MySQL 全文检索则是 MySQL 数据库提供的一种用于进行全文搜索的技术。要在 Flask-SQLAlchemy使用 MySQL 全文检索,需要进行以下步骤: 1. 确保 MySQL 数据库版本大于或等于 5.6,并且已经启用了全文检索功能。 2. 在 Flask-SQLAlchemy 中定义需要进行全文检索的模型,并将其中需要进行全文检索的字段定义为 Text 类型。 例如,定义一个名为 `Article` 的模型,并将其中的 `content` 字段定义为 Text 类型: ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Article(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128)) content = db.Column(db.Text) ``` 3. 创建全文索引。可以使用 SQLAlchemy 提供的 `text` 函数创建全文索引,也可以使用 MySQL 的原生语句创建全文索引。 使用 SQLAlchemy 的 `text` 函数创建全文索引的示例代码如下: ```python from sqlalchemy import text class Article(db.Model): __tablename__ = 'article' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128)) content = db.Column(db.Text) __table_args__ = ( text('FULLTEXT idx_content (content)'), ) ``` 以上代码创建了一个名为 `idx_content` 的全文索引,该索引包含了 `content` 字段。 4. 使用全文检索进行搜索。可以使用 SQLAlchemy 提供的 `match` 函数进行全文检索,也可以使用 MySQL 的原生语句进行全文检索。 使用 SQLAlchemy 的 `match` 函数进行全文检索的示例代码如下: ```python from sqlalchemy import func articles = Article.query.filter(func.match(Article.content, 'search keyword')).all() ``` 以上代码将返回一个包含了符合搜索关键字的所有文章的列表。 使用 MySQL 的原生语句进行全文检索的示例代码如下: ```python articles = db.session.execute("SELECT * FROM article WHERE MATCH (content) AGAINST ('search keyword' IN NATURAL LANGUAGE MODE)").fetchall() ``` 以上代码使用 MySQL 的 `MATCH` 和 `AGAINST` 关键字进行全文检索,并返回一个包含了符合搜索关键字的所有文章的列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值