flask_sqlalchemy 模块

目录

1 背景

2 使用

2.1 安装

2.2 样例代码

2.3 代码解析

2.4 常见问题

2.4.1 sqlalchemy.exc.ArgumentError: Mapper mapped class TestCase->test_case could not assemble any primary key columns for mapped table 'test_case'

2.4.2 在 通过 db.create_all() 根据 TestCaseModel.py 创建 数据库表结构时,报错ModuleNotFoundError: No module named 'MySQLdb' 。


1 背景

Flask 没有自带的 ORM 框架,但有一个与 Flask 亲和性较好的 ORM 第三方模块 flask_sqlalchemy

2 使用

2.1 安装

pip install flask_sqlalchemy

2.2 样例代码

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123456@127.0.0.1:3306/tp?charset=utf8"
app.config['SQLALCHEMY_ECHO'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

db.create_all()

2.3 代码解析

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123456@127.0.0.1:3306/tp?charset=utf8" [ mysql 指定什么类型的数据库,如果为 oracle 数据库,则为 oralce; tp 为 database 名称 ]

app.config['SQLALCHEMY_ECHO'] = True [ 在操作数据库时,将 sql 打印出来 ]

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False [ 是否跟踪数据库的修改情况,建议 False ]

db = SQLAlchemy(app) [ 实例化 ORM 框架的操作对象,后续数据库操作,都要使用该操作对象来完成 ]

db.create_all() [ 根据 TestCaseModel.py 在 db 创建所有表结构,但是 如果 在 Model.py 增加了一个 字段,即使再次执行一遍 db.create_all() 也不会更新 db 中的 表结构,如果有这种需求需要 使用 第三方模块 flask-migrate、flask-script ]

2.4 常见问题

2.4.1 sqlalchemy.exc.ArgumentError: Mapper mapped class TestCase->test_case could not assemble any primary key columns for mapped table 'test_case'

一个表如果没有自增的 id 作为 pk 就会报这个错。

id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False)

2.4.2 在 通过 db.create_all() 根据 TestCaseModel.py 创建 数据库表结构时,报错ModuleNotFoundError: No module named 'MySQLdb' 。

产生原因:MySQLdb 只支持 Python 2.*,不支持 3.* ,可以用 PyMySQL 代替。

解决方案:安装 pip install PyMySQL,并在调用 db.create_all() 的地方,增加如下代码

import pymysql

pymysql.install_as_MySQLdb()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值