SQLAlchemy手冊(四)- 關(guān)聯(lián)查詢

上一回扭仁,我們介紹了炊琉,常用的單查詢SQL展蒂,這里,我們介紹下苔咪,怎樣進行關(guān)聯(lián)查詢锰悼,就是join的使用
數(shù)據(jù)庫使用表信息:
t_class


t_student


t_student表存有t_class表的id,獲取學生所屬的班級信息

# -*- coding: utf-8 -*-

from sqlalchemy import MetaData, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, or_, and_
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy import text, func
from sqlalchemy.orm import sessionmaker
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

Base = declarative_base()
engine = create_engine('postgresql://postgres:shishi@localhost:5432/postgres')
Session = sessionmaker(bind=engine)

session = Session()

class StuClass(Base):
    __tablename__ = 't_class'


    id = Column(Integer,primary_key=True)
    class_name = Column(String(10))

    def __repr__(self):
        return "<StuClass(id='%s', name='%s')>" % (self.id, self.class_name)

class Student(Base):
    __tablename__ = 't_student'

    id = Column(Integer , primary_key=True)
    stu_name = Column(String(10))
    class_id = Column(Integer , ForeignKey('t_class.id'))

    stuClass = relationship("StuClass")

    def __repr__(self):
        return "<Student(id='%s', stu_name='%s', class_id='%s', class_name='%s')>" % (self.id, self.stu_name,self.class_id,self.stuClass.class_name)


#使用filter定義2張表的關(guān)系
for stu, stuc in session.query(Student, StuClass).filter(Student.class_id == StuClass.id).all():
    print stu,stuc

#使用join需要ForeignKey
for x in session.query(Student).join(StuClass).filter(StuClass.id == 803).all():
    print x

下面团赏,我們再寫一個統(tǒng)計班級人數(shù)的SQL


用SQLAlchemy來寫的話箕般,是這樣的

for rs in session.query(StuClass.class_name,func.count('*').label('stu_count')).join(Student).group_by(StuClass.class_name).order_by(StuClass.class_name).all():
    print('班級:' + rs[0] + ' 人數(shù):' + str(rs[1]))
image.png

好了,同樣的功能舔清,我們換成子查詢練習下

 select a.class_name,b.num from t_class a
left join (
    select class_id , count(1) num from t_student group by class_id
)b on b.class_id = a.id
order by a.class_name

那SQLAlchemy是這樣滴:

 sub = session.query(Student.class_id,func.count('*').label('num')).group_by(Student.class_id).subquery()

for sc,num in session.query(StuClass,sub.c.num).outerjoin(sub, StuClass.id == sub.c.class_id).order_by(StuClass.class_name).all():
    print sc,num

今天暫時先到這里丝里,后面的話曲初,官網(wǎng)上例子挺全的,大家可以自行練習下杯聚,后續(xù)也會再整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臼婆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子幌绍,更是在濱河造成了極大的恐慌颁褂,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傀广,死亡現(xiàn)場離奇詭異颁独,居然都是意外死亡,警方通過查閱死者的電腦和手機主儡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糜值,“玉大人,你說我怎么就攤上這事寂汇。” “怎么了骄瓣?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵停巷,是天一觀的道長。 經(jīng)常有香客問我榕栏,道長,這世上最難降的妖魔是什么扒磁? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮妨托,結(jié)果婚禮上缸榛,老公的妹妹穿的比我還像新娘。我一直安慰自己兰伤,他們只是感情好内颗,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布均澳。 她就那樣靜靜地躺著,像睡著了一般负懦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纸厉,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天五嫂,我揣著相機與錄音,去河邊找鬼沃缘。 笑死,一個胖子當著我的面吹牛锄蹂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播得糜,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼晰洒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谍珊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侮邀,失蹤者是張志新(化名)和其女友劉穎贝润,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题暖,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡胧卤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了枝誊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡绝骚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出压汪,到底是詐尸還是另有隱情,我是刑警寧澤腺阳,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布穿香,位于F島的核電站,受9級特大地震影響皮获,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洒宝,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一待德、第九天 我趴在偏房一處隱蔽的房頂上張望君丁。 院中可真熱鬧将宪,春花似錦、人聲如沸较坛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽法竞。三九已至,卻和暖如春岔霸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呆细。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趴酣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓岖寞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親床嫌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容