flask入门教程(10) - SQLAlchemy

这篇flask入门教程介绍了如何使用SQLAlchemy作为数据库扩展。内容包括数据库的安装,通过`SQLALCHEMY_DATABASE_URL`配置连接本地sqlite数据库,禁用`SQLALCHEMY_TRACK_MODIFICATIONS`以提高效率,以及数据库模型的数据类型。还展示了基础的数据库操作,如创建表和插入数据。文章最后提及了如何处理多数据库的情况。
摘要由CSDN通过智能技术生成

数据库

网页自然是少不了数据库保存信息,而比较常用的则是SQL关系式数据库,由此,flask-sqlalchemy插件诞生。

flask只提供基础,其它部分比如数据库就交给强大的扩展完成,现在开始吧。

安装

安装还是简单的pip:

pip install flask-sqlalchemy

开始

# app.py
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = "user"
    id = db.Column("user_id", db.Integer, primary_key=True)
    username = db.Column(db.String(100), unique=True)
    password = db.Column(db.String(100))
    
    def __init__(self, username, password):
        self.username = username
        self.password = password
        
    def __repr__(self):
        return self.username

if __name__ == "__main__":
    app.run(debug=True)

首先引入flask-sqlalchemy模块,然后使用app对象创建一个数据库,注意这里的两个配置:

  • SQLALCHEMY_DATABASE_URL:这就是数据库的地址,我们可以使用sqlite:///来进行本地数据库的创建。
  • SQLALCHEMY_TRACK_MODIFICATIONS:这时sqlalchemy的跟踪对象修改,最好禁止以提升效率。

我们再来看看数据库的创建,这里的Integer和String等都是这个项的类型,总共是这些:

  • Integer:整数
  • String(size):字符串,并可以设置它的最大长度
  • Text:unicode文本
  • DateTime:通过datetime模块来表示时间日期
  • Float:浮点数
  • Boolean:布尔值
  • PickleType:存储一个pickle对象
  • LargeBinary:二进制数据

然后,为了方便测试,我们在命令行引入,进行测试,注释已标明:

>>> from app import db, User   # 引入数据库对象
>>> db.create_all()   # 创建数据库
>>> jack = User("Jack", "flask")   # 创建一个User对象
>>> db.session.add(jack)   # 加入这个User对象
>>> db.session.commit()   # 提交修改
>>> tom = User("Tom", "python3")
>>> alice = User("Alice", "python")   # 再创建两个User对象
>>> db.session.add(tom)
>>> db.session.add(alice)   
>>> db.session.commit()   # 一样的操作
>>> User.query.all()   # 获取数据库中所有数据
[Jack, Tom, Alice]
>>> alice = User.query.filter_by(username="Alice").first()   # 找到username为Alice的对象
>>> alice.id, alice.username, alice.password   # 得到它的数据
(3, 'Alice', 'python')
>>> User.query.filter(User.password.startswith("python")).all()   # 得到密码以python起头的对象
[Tom, Alice]
>>> User.query.order_by(User.username).all()   # 以用户名排序
[Alice, Jack, Tom]
>>> User.query.limit(1).all()   # 限制得到一个对象
[Jack]
>>> User.query.get(1)   # 获取id为1的对象
Jack
>>> db.session.delete(alice)   # 删除alice用户
>>> db.session.commit()   # 提交修改

这样懂了吗?

多数据库

当然,我们一个应用可能不止一个数据库,那怎么区分了,这时候就需要用到bind_key:

class Database1(db.Model):
    pass

class Database2(db.Model):
    __bind_key__ = "database2"

db.create_all()
db.create_all(bind="database2")

下次见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值