關係屬性 反向引用 動態查詢

2021-10-03 09:22:05 字數 3418 閱讀 1769

定義

# 使用者表  一   乙個使用者可以有多個位址

class

user

(db.model)

: __tablename__ =

't_user'

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

true

) name = db.column(db.string(20)

)# 1.定義關係屬性 relationship("關聯的類名")

addresses = db.relationship(

'address'

)# 位址表 多

class

address

(db.model)

: __tablename__ =

't_adr'

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

true

) detail = db.column(db.string(20)

)# 2. 定義外來鍵引數 db.foreignkey('引用表名.引用欄位名')

user_id = db.column(db.integer, db.foreignkey(

't_user.id'

))

步驟

使用關係屬性

user1 = user.query.filter_by(name=

'張三'

).first(

)for address in user1.addresses:

print

(address.detail)

兩條sql查詢:

1、select t_user.

id as t_user_id, t_user.name as t_user_name

from t_user where t_user.name =

%s limit %s;

2、select t_adr.

id as t_adr_id, t_adr.detail as t_adr_detail, t_adr.user_id as t_adr_user_id from t_adr where %s = t_adr.user_id

定義

# 使用者表  一   乙個使用者可以有多個位址

class

user

(db.model)

: __tablename__ =

't_user'

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

true

) name = db.column(db.string(20)

) addresses = db.relationship(

'address'

, backref=

'user_info'

)# 設定backref引數 等效於 設定反向關係屬性

# 位址表 多

class

address

(db.model)

: __tablename__ =

't_adr'

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

true

) detail = db.column(db.string(20)

) user_id = db.column(db.integer, db.foreignkey(

't_user.id'))

# user_info = db.relationship('user') # 定義反向關係屬性

步驟

使用反向關係屬性

# 查詢到位址

adr = address.query.

filter

(address.detail ==

'中關村3號'

).first(

)# 根據位址找人

print

(adr.user_info.name)

# 對一關係, 取出的是直接是模型物件

定義

# 使用者表  一   乙個使用者可以有多個位址

class

user

(db.model)

: __tablename__ =

't_user'

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

true

) name = db.column(db.string(20)

) addresses = db.relationship(

'address'

, lazy=

'dynamic'

)# 位址表 多

class

address

(db.model)

: __tablename__ =

't_adr'

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

true

) detail = db.column(db.string(20)

) user_id = db.column(db.integer, db.foreignkey(

't_user.id'

))

步驟

使用動態查詢

# 先根據姓名查詢使用者主鍵

user1 = user.query.filter_by(name=

'張三'

).first(

)# 使用關係屬性獲取關係資料 需求: 查詢 姓名為"張三", 並且 位址以 "中關村" 開頭的 位址資訊

adrs = user1.addresses.

filter

(address.detail.startswith(

'中關村'))

.all()

# 對結果集進行進一步條件篩選

print

(adrs[0]

.detail)

# for address in user1.addresses: # 遍歷取值

# print(address.detail)

# print(user1.addresses[0].detail) # 索引取值

relationship 關係引用和反向關係引用

relationship 增加了關係引用,為了查詢方便.由原先的2次查詢,改為了1次查詢 乙個角色對應多個使用者 一的一方 role 定義關係引用和反向引用.多的一方 user 定義外來鍵 users 是為了當前模型方便查詢定義的.backref role 這裡的role是給關聯模型提供的查詢屬性c...

JScript 中的反向引用和使用反向引用

正規表示式的最重要功能之一是儲存匹配的模式的一部分以供以後重新使用的能力。您可能想起,若在正規表示式模式或模式的一部分兩側加上括號,就會導致表示式的一部分被儲存到臨時緩衝區中。可以通過使用非捕獲元字元 或 來重寫捕獲。每個捕獲的子匹配項按照它們在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 ...

java正則反向引用

backreference 反向引用.與捕獲組匹配的輸入字串結果儲存在記憶體中,以便以後通過反向引用進行呼叫。用 數字,表示要引用的group 數字 普通捕獲組反向引用 k,通常簡寫為 number 命名捕獲組反向引用 k或者 k name 源表示式 1212 正規表示式 d d 1 匹配結果 12...