天天看點

sqlalchemy mysql_通過Flask-SQLAlchemy管理資料庫(一)

sqlalchemy mysql_通過Flask-SQLAlchemy管理資料庫(一)

ORM的魔法

  • 手動編寫SQL語句會降低代碼易讀性,還會出現安全問題
  • 在部署切換DBMS時會需要不同的Python接口庫,不太容易

使用ORM會幫你處理查詢參數的轉義,避免SQL注入的風險,另外它為不同的DBMS提供統一接口,讓部署切換資料庫變得非常簡單。ORM扮演翻譯的角色,能夠讓Python讀懂SQL語句,讓我們使用Python來操作資料庫

ORM實作的三層映射

  • 表--->Python類
  • 字段(列)--->類屬性
  • 記錄(行)--->類執行個體

使用Python實作的ORM有SQLAlchemy等,直譯就是SQL煉金術

使用Flask-SQLAlchemy管理資料庫

  1. 安裝 pipenv install flask-sqlalchemy
  2. 使用

    from flask import Flask

    from flasksqlalchemy import SQLAlchemy

    app = Flask(_name__)

    db = SQLAlchemy(app)

連接配接資料庫伺服器

Postgres:postgresql://scott:[email protected]/mydatabase

MySQL:mysql://username:[email protected]/databasename

Oracle:oracle://username:[email protected]/databasename

SQLite(UNIX):sqlite:absolute/path/to/foo.db

SQLite(記憶體):sqlite:///:memory:

SQLite(Windows):sqlite:absolutepathtofoo.db

在Flask-SQLAlchemy中通過SQLALCHEMY_DATABASE_URI設定。
# SQLite URI compatible
WIN = sys.platform.startswith('win')
if WIN:
    prefix = 'sqlite:///'
else:
    prefix = 'sqlite:'

app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', prefix + os.path.join(app.root_path, 'data.db'))
           

在Flask-SQLAlchemy中預設為SQLite記憶體型資料庫(sqlite:///:memory:),SQLite是基于檔案的DBMS,不需要設定資料庫伺服器,隻需指定絕對路徑,通過app.root_path來定位資料庫。

建立資料庫模型

class User(db.Model):  # 表名将會是 user(自動生成,小寫處理)
    id = db.Column(db.Integer, primary_key=True)  # 主鍵
    name = db.Column(db.String(20))  # 名字
           

模型類的編寫有一些限制:

  • 模型類要聲明繼承

    db.Model

  • 每一個類屬性(字段)要執行個體化

    db.Column

    ,傳入的參數為字段的類型,下面的表格列出了常用的字段類。
  • db.Column()

    中添加額外的選項(參數)可以對字段進行設定。比如,

    primary_key

    設定目前字段是否為主鍵。除此之外,常用的選項還有

    nullable

    (布爾值,是否允許為空值)、

    index

    (布爾值,是否設定索引)、

    unique

    (布爾值,是否允許重複值)、

    default

    (設定預設值)等。

常用的字段類型如下表所示:

  • db.Integer

    整型
  • db.String (size)

    字元串,size 為最大長度,比如

    db.String(20)

  • db.Text

    長文本
  • db.DateTime

    時間日期,Python

    datetime

    對象
  • db.Float

    浮點數
  • db.Boolean

    布爾值