flask sqlalchemy分表解決方案

2021-07-10 14:55:52 字數 2569 閱讀 5011

flask-sqlalchemy, sqlalchemy, 分表,分庫

大型系統、海量資料肯定涉及到分庫分表這些提高效率的手段。由於sqlalchemy的orm思想是一張表對應乙個物件,那麼當我們有n張相同結構只是表名有區別的分表,sqlalchemy orm怎樣處理呢。比如有如下表:

create table 

`goods_desc_0`

(`goods_id`

bigint(20

)unsigned

not null default

'0'comment

'商品id'

,`goods_desc`

text not null comment

'商品詳細描述'

,primary key

(`goods_id`))

engine

=innodb

default charset

=utf8 row_format

=compact comment

='商品資訊詳情'

create table

`goods_desc_1`

(`goods_id`

bigint(20

)unsigned

not null default

'0'comment

'商品id'

,`goods_desc`

text not null comment

'商品詳細描述'

,primary key

(`goods_id`))

engine

=innodb

default charset

=utf8 row_format

=compact comment

='商品資訊詳情'

class

goodsdesc(db

.model

):__tablename__

='goods_desc'

goods_id =db

.column(db

.integer

,primary_key

=true

)goods_desc =db

.column(db

.text

,default

=none

)def

__str__

(self

):return

"goodsdesc => "%(

self

.goods_id

,self

.goods_desc

)__repr__

=__str__

# **示例

goods_id

=101

table_index

=goods_id%2

table_name

='goods_desc_%d'

%table_index

goodsdesc

.__table__

.name

=table_name

gd =

goodsdesc

.query

.filter

(goodsdesc

.goods_id

==goods_id

).first

()# 這樣寫雖然也能工作,但是是非常危險的,因為goodsdesc.__table__是靜態全域性變數,

經過n次google,終於找到解決方案,而且**寫起來也很優雅。**如下:

class

goodsdesc

(object):=

{}@staticmethod

defmodel

(goods_id

):table_index

=goods_id

%100

class_name

='goodsdesc_%d'

%table_index

modelclass

=goodsdesc..

get(

class_name

,none)if

modelclass

isnone

:modelclass

=type

(class_name,(

db.model

,),)

goodsdesc.[

class_name]=

modelclass

cls

=modelclass

()cls

.goods_id

=goods_id

return

cls# 外部**呼叫如例如下:

# -----------------------

# 新增插入

gdm

=goodsdesc

.model

(goods_id

)

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類建構函式的第乙個引數是...