Flask SQLAlchemy學習總結

2021-08-11 02:40:28 字數 4747 閱讀 1912

配置鍵說明

sqlalchemy_database_uri

用於連線資料的資料庫。例如:

sqlalchemy_binds

乙個對映繫結 (bind) 鍵到 sqlalchemy 連線 uris 的字典。用於繫結多個資料庫

sqlalchemy_echo

如果設定成 

true

,sqlalchemy 將會記錄所有 發到標準輸出(stderr)的語句,這對除錯很有幫助。

sqlalchemy_record_queries

可以用於顯式地禁用或者啟用查詢記錄。查詢記錄 在除錯或者測試模式下自動啟用。更多資訊請參閱get_debug_queries()

sqlalchemy_native_unicode

可以用於顯式地禁用支援原生的 unicode。這是 某些資料庫介面卡必須的(像在 ubuntu 某些版本上的 postgresql),當使用不合適的指定無編碼的資料庫 預設值時。

sqlalchemy_pool_size

資料庫連線池的大小。預設是資料庫引擎的預設值 (通常是 5)。

sqlalchemy_pool_timeout

指定資料庫連線池的超時時間。預設是 10。

sqlalchemy_pool_recycle

自動**連線的秒數。這對 mysql 是必須的,預設 情況下 mysql 會自動移除閒置 8 小時或者以上的連線。 需要注意地是如果使用 mysql 的話, flask-sqlalchemy 會自動地設定這個值為 2 小時。

sqlalchemy_max_overflow

控制在連線池達到最大值後可以建立的連線數。當這些額外的 連線**到連線池後將會被斷開和拋棄。

sqlalchemy_track_modifications

如果設定成 

true

(預設情況),flask-sqlalchemy 將會追蹤物件的修改並且傳送訊號。這需要額外的記憶體, 如果不必要的可以禁用它。

flask專案中,一般使用單獨的檔案儲存配置(如:config.py),應用程式可以使用from_object()來獲取配置資訊

db = sqlalchemy()

class user(db.model):

__tablename__ = 'user'

id = db.column(db.integer, primary_key=true)

username = db.column(db.string(80), unique=true)

email = db.column(db.string(120), unique=true)

def __init__(self, username, email):

self.username = username

self.email = email

def __repr__(self):

return '' % self.username

列型別說明

integer

乙個整數

string

(size)

有長度限制的字串

text

一些較長的 unicode 文字

datetime

表示為 pythondatetime物件的 時間和日期

float

儲存浮點值

boolean

儲存布林值

pickletype

儲存為乙個持久化的 python 物件

largebinary

儲存乙個任意大的二進位制資料

選項名說明

primary_key

如果設為true,表示主鍵

unique

如果設為true,這列不重複

index

如果設為true,建立索引,提公升查詢效率

nullable

如果設為true,允許空值

default

為這列定義預設值,可以接受lambda表示式

a. 插入記錄

向資料庫插入資料分為三個步驟:

建立 python 物件

把它新增到會話

提交會話

>>> me = user('admin', '[email protected]')

>>> db.session.add(me)

>>> db.session.commit()

b. 刪除記錄

>>> db.session.delete(me)

>>> db.session.commit()

c. 查詢記錄

flask-sqlalchemy 在您的 model 類上提供了 query 屬性。當您訪問它時,您會得到乙個新的所有記錄的查詢物件。

>>> peter = user.query.filter_by(username='peter').first()

>>> peter.id

1>>> peter.email

u'[email protected]'

sqlalchemy有查詢過濾器如下:

過濾器說明

filter()

把過濾器新增到原查詢,返回新查詢

filter_by()

把等值過濾器新增到原查詢,返回新查詢

limit()

使用指定值限制原查詢返回的結果數量,返回新查詢

offset()

偏移原查詢返回的結果,返回新查詢

order_by()

排序返回結果,返回新查詢

groupby()

原查詢分組,返回新查詢

這些過濾器返回的結果都是乙個新查詢,這些查詢其實是生成的sql語句,惰性求值方式也體現在查詢上,而這些語句不能生成需要查詢的物件,需要呼叫其他的方法生成物件。

sql查詢執行函式:

方法說明

all()

以列表形式返回結果

first()

返回第乙個結果,如果沒有返回none

first_or_404()

返回第乙個結果,如果沒有丟擲404異常

get()

返回主鍵對應記錄,沒有則返回none

get_or_404()

返回主鍵對應記錄,如果沒有丟擲404異常

count()

返回查詢結果數量

paginate()

返回paginate物件,此物件用於分頁

sqlalchemy_database_uri = 'postgres://localhost/main'

sqlalchemy_binds =

create_all() 和 drop_all() 方法預設作用於所有宣告的繫結(bind),包括預設的。這個行為可以通過提供 bind 引數來定製。

>>> db.create_all()

>>> db.create_all(bind=['users'])

>>> db.drop_all(bind=none)

當您宣告模型時,您可以用 __bind_key__ 屬性指定繫結(bind):

class user(db.model):

__bind_key__ = 'users'

id = db.column(db.integer, primary_key=true)

username = db.column(db.string(80), unique=true)

如果您在模型上指定了 __bind_key__ ,您可以用它們準確地做您想要的。模型會自行連 接到指定的資料庫連線。

建立管理檔案manage.py

from flask import flask

from flask_sqlalchemy import sqlalchemy

from flask_script import manager, shell

from flask_migrate import migrate, migratecommand

db = sqlalchemy()

manager.add_command('db', migratecommand)

manager.run()

manager使用說明:

命令格式:

python manager.py db [command]

command說明:

init-初始化資料庫遷移(自動生成migrations目錄及檔案),僅在第一次使用

migrate-生成遷移資料,自動根據model變化生成遷移資料檔案,含版本控制

upgrade-執行公升級操作,將變動的表結構提交到資料庫,保留資料庫原資料

downgrade-執行降級操作, 相當於撤回本次公升級操作

flask SQLAlchemy基本使用

作為資料的操作,最基本的就是增刪改查 常用的sqlalchemy查詢過濾器 過濾器說明 filter 把過濾器新增到原查詢上,返回乙個新查詢 filter by 把等值過濾器新增到原查詢上,返回乙個新查詢 limit 使用指定的值限定原查詢返回的結果 offset 偏移原查詢返回的結果,返回乙個新查...

Flask SQLAlchemy定義模型

模型表示程式使用的資料實體,在flask sqlalchemy中,模型一般是python類,繼承自db.model,db是sqlalchemy類的例項,代表程式使用的資料庫。類中的屬性對應資料庫表中的列。id為主鍵,是由flask sqlalchemy管理。db.column類建構函式的第乙個引數是...

flask sqlalchemy用法簡介

coding utf 8 time 2019 5 26 20 54 author dailinqing email dailinqing 126.com file flask db.py software pycharm from flask sqlalchemy import sqlalchemy...