[Flask][Python3]在flask应用中使用Sqlalchemy操作MySQL数据库

我的环境:
Windows10 + Python3.7 + Flask 1.0.2 + Pycharm 2018.2.3 Professional
前言:找了很多关于 flask_sqlalchemy的教程都是针对python2.x的,我自己在python3环境下使用出现了各种问题,以下是摸索出的可行方案。

摘要

  1. 配置URI连接MySQL数据库
  2. 在MySQL中建立一张表

1.配置URI

通过下述语句配置数据库URI

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<用户名>:<密码>@<数据库服务器地址>[:<端口>]/<数据库名称>[?<编码方式>]

说明:

  1. pymysql是数据库驱动名称,经我自己使用情况下只有这个驱动能用,mysqldb无法成功连接;另:在flask_sqlalchemy中无需单独使用pip命令安装就可以直接使用
  2. 在本机下使用默认情况下数据库服务器地址就填localhost或者127.0.0.1MySQL默认端口为3306不填此项则为默认值
  3. 编码方式推荐使用UTF8,Python3默认编码也是UTF8,此项填入charset=utf8即可(注意不是utf-8,加-会报错)

我的配置如下

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:3699@localhost/mydb?charset=utf8'

2. 使用flask_sqlalchemy中的ORM建立一张表


百度百科定义ORM如下

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换

暂时没有去详细探究这个技术,目前能成功使用就好
我的理解如下:
这个概念在flask_sqlalchemy中意思大概就是说把数据库中的各种数据模型与flask_sqlalchemy中定义的数据模型(主要是各种类)进行对应



  1. 数据库模型映射
    在配制好数据库URI后需要在Python中创建数据库对象,使用如下语句,即可将数据库与flask app绑定在配制好数据库URI后需要在Python中创建数据库对象,使用如下语句,即可将数据库与flask app绑定
db = SQLAlchemy(app)
  1. 数据表模型映射
    假设要建立一张表article,需要定义一个继承于db.Model的类:
class Article(db.Model)

然后在这个类里面设置这张表的表头等信息

  • 表名:
    __tablename__ = 'article'
  • 各个列:
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)

最后用create_all()方法建表

db.create_all()

通过命令行进入MySQL可以看见表已经生成
在这里插入图片描述

3.全部源码如下

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:3699@localhost/mydb?charset=utf8'
db = SQLAlchemy(app)


class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)


db.create_all()


@app.route('/')
def hello_world():
    return 'Hello World!'
   
   
if __name__ == '__main__':
    app.run()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章