结合SQLAlchemy联通数据库

安装flask_sqlalchemy和mysqlclient【不知道为啥要安装mysqlclient,老师说装不了就用pymysql】

mysql驱动

mysql驱动默认是mysqlclient的
SQLALCHEMY_DATABASE_URI的值为”数据库类型+数据库驱动://用户名:密码@host:port/db_name”
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://xx:123456@xxxx/mysql"

如果直接写数据库的信息在核心文件中,并且没有安装mysqlclient和pymysql的话。会报错:No Module named MySQLdb
flask与数据库打交道 - 图1

绑定app

两种方法使用场景不一样,init_app可以相对来说引入文件不会那么复杂。

方法一 init_app

falsk_sqlalchemy的init_app方法可以绑定到app中
db = SQLAlchemy()
db.init_app(app)

方法二 构造函数

db = SQLalchemy(app)

Flask通过Model访问数据库,即ORM

在根目录下创建一个common文件夹,在common文件夹下创建一个models文件夹,在models下创建一个user的py文件。
user.py

  1. from application import db
  2. class User(db.Model):
  3. Host = db.Column(db.String(80),primary_key = True)
  4. User = db.Column(db.String(120))

然后回到blueprint.py 把手动写sql的操作改一下。

  1. from common.models.user import User
  2. @index_page.route('/db_select')
  3. def db_select():
  4. context = {}
  5. # sql = text("select * from `user`")
  6. # result = db.engine.execute(sql)
  7. result = User.query.all()
  8. context['result'] = result
  9. return render_template("db_data.html",**context)

然后再访问这个页面:
flask与数据库打交道 - 图2

数据查询

对于这里的User.query.all()返回的结果,是model对象的 __repr__ 函数决定的。
否则默认返回的是