flask sqlalchemy事務簡單處理

2021-09-22 20:06:32 字數 1285 閱讀 8350

from functools import wraps

from contextlib import contextdecorator

'''示例程式:

建立乙個新使用者,同時將新使用者關聯到一家公司下,

這需要兩步資料庫操作,但是這應該是乙個事務,

要麼都完成,要麼都未完成

注意:即使只有一步,也需要如下操作

flush和commit區別:

> flush: 寫資料庫,但不提交,也就是事務未結束

> commit: 是先呼叫flush寫資料庫,然後提交,結束事務,並開始新的事務

def create_user(name, phone):

data =

user = user(name)

db.session.add(user)

db.session.flush()

return user

data =

db.session.flush()

class createuser(api):

def post(self, params):

name = params['name']

phone = params['phone']

company_id = params['company_id']

# 這裡用with語句將兩個操作封閉成乙個原子操作

with atomic(db):

user = create_user(name, phone)

# 注意:即使只有一步建立使用者的操作也需要這樣寫

with atomic(db)

user = create_user(name, phone)

'''def atomic(db):

''''''

if callable(db):

return atomic(db)(db)

else:

return atomic(db)

class atomic(contextdecorator):

def __init__(self, db):

self.db = db

def __enter__(self):

pass

def __exit__(self, exc_typ, exc_val, tb):

if exc_typ:

self.db.session.rollback()

else:

self.db.session.commit()

Flask SQLAlchemy學習總結

配置鍵說明 sqlalchemy database uri 用於連線資料的資料庫。例如 sqlalchemy binds 乙個對映繫結 bind 鍵到 sqlalchemy 連線 uris 的字典。用於繫結多個資料庫 sqlalchemy echo 如果設定成 true sqlalchemy 將會記...

flask SQLAlchemy基本使用

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

Flask SQLAlchemy定義模型

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