python中sqlalchemy模組的使用二

2021-08-19 06:02:23 字數 3998 閱讀 3566

廢話不多說,咱們直接上**:

1、使用in查詢

def 

use_in():

session =

dbsession()

users = session.query(user).filter(user.name.in_(['zhangsan','lisi'])).all()

print([user for user in users])

執行結果:

sql:  select user.user_name as user_user_name, user.id as user_id, user.age as user_age 

from user 

where user.user_name in (%s, %s)

2、使用count統計

def 

use_count():

session =

dbsession()

count = session.query(user).filter().count()

print(count)

列印sql:

select count(*) as count_1 

from (select user.user_name as user_user_name, user.id as user_id, user.age as user_age 

from user) as anon_1

3、使用group分組

from sqlalchemy import func

def

use_group():

session =

dbsession()

users = session.query(user.age,func.count(user.age)).group_by(user.age).all()

print([user for user in users])

use_group()

列印sql:

select user.age as user_age, count(user.age) as count_1 

from user group by user.age

返回結果:[(12, 2), (18, 1), (24, 1)]

4、使用關聯查詢

新增角色表:

class 

role(basemodel):

# 表名

__tablename__ =

'role'id =

column('id', integer, primary_key

=true, autoincrement

=true)

name =

column("role_name",string(20))

def

__repr__(self):

return

self.name

#

定義物件

class

user(basemodel):#表名

__tablename__=

'user'id =

column('id',integer,primary_key

=true,autoincrement

=true)

name =

column("user_name",string(20))#

資料庫中的欄位名稱為:

user_name

age =

column('age', integer)

role_id =

column('role_id',integer)

#方便輸出,我們列印

user

時呼叫此方法

def

__repr__(self):

return

"id:%d,name:%s,age:%d"% (self.id, self.name, self.age)

使用者表中新增了role_id欄位

資料表:

user表:

role表:

def 

use_relation_query():

session =

dbsession()

user_role_datas = session.query(user,role).filter(user.role_id == role.id).all()

print([user_role_data for user_role_data in user_role_datas])

use_relation_query()

sql語句:

select user.user_name as user_user_name, user.id as user_id, user.age as user_age, user.role_id as user_role_id, `role`.role_name as role_role_name, `role`.id as role_id 

from user, `role` 

where user.role_id = `role`.id

結果:[(id:1,name:zhangsan,age:18, 超級管理員), (id:2,name:lisi,age:12, 超級管理員), (id:3,name:zhaoliu,age:24, 一般管理員)]

使用orm框架運算元據庫給我們增加了很多方便,不需要我們自己去寫sql,也不用關心內部實現的細節,當我們遷移的時候也不用考慮太多問題(比如從mysql遷移到oracle), 但這樣也會讓程式設計師對sql缺乏認識,寫不出有效的sql,使用orm肯定會影響系統的效能,在使用orm框架時,希望學習者去列印orm生成的sql,去了解sql如何生成的,sql也是一門語言,也要多多了解一些,不能只停留在簡單的sql上面,因為當你遇到系統瓶頸,想進一步去優化系統時,就需要你寫一些高效的sql了

努力成就非凡,請不要在最該奮鬥的年紀選擇安逸

Flask資料庫基本操作 SQLAlchemy

flask資料庫 d 使用擴充套件包flask sqlalchemy來運算元據庫 增刪改查 e 通過 python 物件來運算元據庫,在捨棄一些效能開銷的同時,換來的是開發效率的較大提公升 u 常用的sqlalchemy欄位型別 常用的sqlalchemy列選項 常用的sqlalchemy關係選項 ...

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中否定for 在python中否定函式

有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...