在flask框架中使用SQLAlchemy
本博文带领大家使用 SQLAlchemy 连接 MySQL 数据库,并介绍了使用 SQLAlchemy 进行简单了 CURD 操作
1、SQLAlchemy是ORM(Object-Relational Mapping:对象关系映射)框架中最有名的一个框架
2、Flask-SQLAlchemy安装及设置
a、安装flask-sqlalchemy:
$pip install flask-sqlalchemy
b、如果连接的是mysql数据库,需要安装mysqldb:
$ pip install flask-mysqldb
3、 数据库连接设置在 Flask-SQLAlchemy 中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI
app.config[‘SQLALCHEMY_DATABASE_URI’] =
‘mysql://root:mysql@127.0.0.1:3306/db’
解释下
mysql是数据库类型,选择自己要操作的类型,可以有MySQL,Oracle,Postgres,
SQLite,值得一提的是,SQLite需要在开头是四个斜线
root表示当前用户名# mysql表示数据库密码# 127.0.0.1:3306表示localhost,3306是mysql端口号
db表示事先在数据库中建好的的数据库名.
其他设置:
动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
配置完成需要去 MySQL 中创建项目所使用的数据库
$ mysql -uroot -pmysql
$ create database db charset utf8;
其他配置:
4、常用的SQLAlchemy字段类型
5、常用的SQLAlchemy列选项
6、常用的SQLAlchemy关系选项
7、数据库基本操作及一对多模型
在视图函数中定义模型类
# 导包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 初始化对象
app = Flask(__name__)
# 添加配置
class Config(object):
SQLALCHEMY_DATABASE_URI = "mysql://root:123456@192.168.85.130:3306/db"
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True # 会打印原生sql语句,便于观察
app.config.from_object(Config)
# 将数据库与对象连接
db = SQLAlchemy(app)
# 定义一个角色类
# 假设一人只能分饰一个角色,但是一个角色可以是多人,所以role是一对多的一
# 在一的一方用relationship来定义这种一对多的关系
class Role(db.Model):
__tablename__ = "roles"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
# backref 固定写法,表示的是反推
# 第一个参数表示要关联的类的模型
# 第二个参数表示新增加的一个属性,属性的名字随意取
us = db.relationship("User", backref="role")
def __repr__(self):
return "Role = %s" % self.name
class User(db.Model):
# users表示表名,名称自定义
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
password = db.Column(db.String(128))
email = db.Column(db.String(128))
# ForeignKey 在多的一方定义外键
role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))
#repr()方法显示一个可读字符串
def __repr__(self):
return "User = %s" % self.name
@app.route("/")
def index():
return "index page"
if __name__ == '__main__':
# 创建表
db.create_all()
ro1 = Role(name="admin")
# 插入一条数据
db.session.add(ro1)
db.session.commit()
ro2 = Role(name="user")
db.session.add(ro2)
db.session.commit()
us1 = User(name='wang', email='wang@163.com',
password='123456', role_id=ro1.id)
us2 = User(name='zhang', email='zhang@189.com',
password='201512', role_id=ro2.id)
us3 = User(name='chen', email='chen@126.com',
password='987654', role_id=ro2.id)
us4 = User(name='zhou', email='zhou@163.com',
password='456789', role_id=ro1.id)
us5 = User(name='tang', email='tang@itheima.com',
password='158104', role_id=ro2.id)
us6 = User(name='wu', email='wu@gmail.com',
password='5623514', role_id=ro2.id)
us7 = User(name='qian', email='qian@gmail.com',
password='1543567', role_id=ro1.id)
us8 = User(name='liu', email='liu@itheima.com',
password='867322', role_id=ro1.id)
us9 = User(name='li', email='li@163.com',
password='4526342', role_id=ro2.id)
us10 = User(name='sun', email='sun@163.com',
password='235523', role_id=ro2.id)
db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])
db.session.commit() # 必须提交,数据才能生效
app.run()
在终端进入数据库,可以查到数据库中已经有上面的数据了
数据库操作—-增删改查
有任何疑问欢迎指出,看到均会回复
欢迎评论转载
源码:
https://github.com/Henry0223/flask/commit/c502c08e9ca8ba94293c56928c8fa2d4859198fe

浙公网安备 33010602011771号