flask的orm框架(SQLAlchemy)-創建表


# 轉載請留言聯系

  • ORM 是什么?

ORM,Object-Relation Mapping。意思就是對象-關系映射。ORM 主要實現模型對象到關系數據庫數據的映射。

優點 :

  • 只需要面向對象編程, 不需要面向數據庫編寫代碼.
    • 對數據庫的操作都轉化成對類屬性和方法的操作.
    • 不用編寫各種數據庫的sql語句.
  • 實現了數據模型與數據庫的解耦, 屏蔽了不同數據庫操作上的差異.
    • 不在關注用的是mysqloracle...等.
    • 通過簡單的配置就可以輕松更換數據庫, 而不需要修改代碼.

缺點 :

  • 相比較直接使用SQL語句操作數據庫,有性能損失.
  • 根據對象的操作轉換成SQL語句,根據查詢的結果轉化成對象, 在映射過程中有性能損失.

 

  • Flask-SQLAlchemy的安裝

SQLAlchemy是一個關系型數據庫框架,它提供了高層的 ORM 和底層的原生數據庫的操作。flask-sqlalchemy 是一個簡化了 SQLAlchemy 操作的 flask 擴展。

  • 安裝 flask-sqlalchemy

pip3 install flask-sqlalchemy

  • 如果連接的是 mysql 數據庫,需要安裝 mysqldb 驅動

pip3 install flask-mysqldb

  • 如果第二步安裝出現錯誤,一般是沒有安裝 libmysqld-dev 造成的

sudo apt-get install libmysqld-dev

 

  • Flask-SQLAlchemy 連接數據庫以及創建表

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)

# 連接數據庫
app.config['SQLALCHEMY_DATABASE_URI'] = '數據庫類型://數據庫用戶名:數據庫密碼@數據庫地址:數據庫端口/數據庫名字'
# 設置是否跟蹤數據庫的修改情況,一般不跟蹤
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 數據庫操作時是否顯示原始SQL語句,一般都是打開的,因為我們后台要日志
app.config['SQLALCHEMY_ECHO'] = True

# 實例化orm框架的操作對象,后續數據庫操作,都要基於操作對象來完成
db = SQLAlchemy(app)

# 聲明模型類
class Role(db.Model):
    __tablename__ = "my_table"    #設置表名
    id = db.Column(db.INTEGER,primary_key=True)    設置字段,以及屬性
    name = db.Column(db.String(10),nullable=False)

@app.route("/")
def index():
    return "hello"

if __name__ == '__main__':
    db.create_all()    # 創建當前應用中聲明的所有模型類對應的數據表,db.drop_all()是刪除表
    app.run(debug=True)

數據庫的其他配置

名字 備注
SQLALCHEMY_DATABASE_URI 用於連接的數據庫 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db
SQLALCHEMY_BINDS 一個映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個數據庫
SQLALCHEMY_ECHO 如果設置為Ture, SQLAlchemy 會記錄所有 發給 stderr 的語句,這對調試有用。(打印sql語句)
SQLALCHEMY_RECORD_QUERIES 可以用於顯式地禁用或啟用查詢記錄。查詢記錄 在調試或測試模式自動啟用。更多信息見get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE 可以用於顯式禁用原生 unicode 支持。當使用 不合適的指定無編碼的數據庫默認值時,這對於 一些數據庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE 數據庫連接池的大小。默認是引擎默認值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT 設定連接池的連接超時時間。默認是 10 。
SQLALCHEMY_POOL_RECYCLE 多少秒后自動回收連接。這對 MySQL 是必要的, 它默認移除閑置多於 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值為 2 小時。

連接其他數據庫

完整連接 URI 列表請跳轉到 SQLAlchemy 下面的文檔 (Supported Databases) 。

常用的SQLAlchemy字段類型

類型名 python中類型 說明
Integer int 普通整數,一般是32位
SmallInteger int 取值范圍小的整數,一般是16位
BigInteger int或long 不限制精度的整數
Float float 浮點數
Numeric decimal.Decimal 普通整數,一般是32位
String str 變長字符串
Text str 變長字符串,對較長或不限長度的字符串做了優化
Unicode unicode 變長Unicode字符串
UnicodeText unicode 變長Unicode字符串,對較長或不限長度的字符串做了優化
Boolean bool 布爾值
Date datetime.date 時間
Time datetime.datetime 日期和時間
LargeBinary str 二進制文件

常用的SQLAlchemy列選項

選項名 說明
primary_key 如果為True,代表表的主鍵
unique 如果為True,代表這列不允許出現重復的值
index 如果為True,為這列創建索引,提高查詢效率
nullable 如果為True,允許有空值,如果為False,不允許有空值
default 為這列定義默認值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM