[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()

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