Flask-SQLAlchemy的使用

Flask-SQLAlchemy的使用_对SQLAlchemy进行了封装和优化:

Flask-SQLAlchemy是一个插件

Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件,        

flask中使用sqlalchemy更加的简单。

1.安装:

     pip install flask-sqlalchemy

2.Flask-SQLAlchemy的使用要点:

    2.1 数据库连接

        数据库初始化不再是通过create_engine。

       1. 跟sqlalchemy一样,定义好数据库连接字符串DB_URI。

       2. 将这个定义好的数据库连接字符串DB_URI,通过`SQLALCHEMY_DATABASE_URI`这个key名配置到`app.config`中。

          代码:app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI

       3. 使用`flask_sqlalchemy.SQLAlchemy`这个类定义一个对象,并将`app`传入进去。

          代码:db = SQLAlchemy(app)

    2.2 创建ORM模型类

        之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了。

        1. 还是跟使用sqlalchemy一样,定义模型。现在不再是需要使用`delarative_base`来创建一个基类。而是使用`db.Model`来作为基类。

        2. 在模型类中,`Column`、`String`、`Integer`以及`relationship`等,都不需要导入了,直接使用`db`下面相应的属性名就可以了。

        3. 在定义模型的时候,可以不写`__tablename__`,那么`flask_sqlalchemy`会默认使用当前的模型的名字转换成小写来作为表的名字,

           并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,

           虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。(增强代码可读性,提高团队合作效率)

    2.3 将ORM模型映射到数据库表

        写完模型类后,要将模型映射到数据库的表中,使用以下代码即可

        1. 删除数据库表:db.drop_all()

        2. 创建数据库表:db.create_all()

    2.4 session的使用

        以后session也不需要使用`sessionmaker`来创建了,

        直接使用`db.session`就可以了,

        操作这个session的时候就跟之前的`sqlalchemy`的`session`是一样一样的。

    2.5 添加数据

        这时候就可以在数据库中看到已经生成了对应表了

        添加数据和之前的没有区别,只是session成为了一个db的属性

    2.6 查询数据:

        1.单表查询

          查询数据不再是之前的session.query方法了,而是将query属性放在了db.Model上,

          所以查询就是通过“模型名.query”的方式进行查询了,`query`就跟之前的sqlalchemy中的query方法是一样用的。

        2.多表查询     

          如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式

    2.7 修改数据:

        修改数据和之前的没有区别,只是session成为了一个db的属性

    2.8 删除数据:

        删除数据跟添加数据和修改数据类似,只不过session是db的一个属性而已

    2.9query函数可传递的参数一共有3种:

1. 模型名。指定查找这个模型中所有的属性(对应查询表为全表查询)。

2. 模型中的属性。可以指定只查找某个模型的其中几个属性。

3. 聚合函数(from sqlalchemy import func)。

    * func.count:统计行的数量。

    * func.avg:求平均值。

    * func.max:求最大值。

    * func.min:求最小值。

    * func.sum:求和。

    `func`上,其实没有任何聚合函数。但是因为他底层做了一些魔术,只要mysql中有的聚合函数,都可以通过func调用。

        

代码示例

from flask import Flask
from flask_sqlalchemy import  SQLAlchemy
app = Flask(__name__)

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#1.连接数据库
db = SQLAlchemy(app)


#2.创建ORM模型
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    uname = db.Column(db.String(50),nullable=False)

    def __repr__(self):
        return "<User(uname: %s)>" % self.uname

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(50),nullable=False)
    uid = db.Column(db.Integer,db.ForeignKey("user.id"))

    author = db.relationship("User",backref="articles")

#3.删除表
db.drop_all()
#4.创建表
db.create_all()


#5.添加数据
user = User(uname='zs')
article = Article(title='wzry')
article.author = user

db.session.add(article)
db.session.commit()


#6.查询数据
# users = User.query.all()  #等价于 db.session.query(User).all()
# print(users)
#在query属性之后  可以用 order_by 、 filter、filter_by、group_by、having等方法进行更复杂的单表查询
#若要进行更复杂的多表查询,只能使用db.session.query(User).all() 这种方式
#如 order_by
users = User.query.order_by(User.id.desc()).all()
print(users)

#7.修改数据
user = User.query.filter(User.uname=='ls').first()
user.uname = 'dc'
db.session.commit()

#8.删除数据
user = User.query.filter(User.uname=='dc').first()
db.session.delete(user)
db.session.commit()

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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
发出的红包

打赏作者

allen wy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值