国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python-SQLAlchemy:第3節(jié):關(guān)系操作

William_Sang / 1693人閱讀

摘要:本節(jié)圍繞在中如何定義關(guān)系及如何使用關(guān)系進(jìn)行查詢進(jìn)行講解,使讀者能夠快速掌握的關(guān)系操作。班級(jí)與學(xué)生為一對(duì)多關(guān)系,班級(jí)與老師之間為多對(duì)多關(guān)系。三年二班多對(duì)多關(guān)系的使用通過關(guān)聯(lián)模型實(shí)現(xiàn),在其中分別設(shè)置模型和的外鍵,并且在父模型中設(shè)置相應(yīng)的實(shí)現(xiàn)。

上一篇文章:Python-SQLAlchemy:第2節(jié):查詢條件設(shè)置
下一篇文章:Python-SQLAlchemy:第4節(jié):級(jí)聯(lián)

關(guān)系數(shù)據(jù)庫(kù)是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),所以表之間的關(guān)系在數(shù)據(jù)庫(kù)編程中尤為重要。本節(jié)圍繞在SQLAlchemy中如何定義關(guān)系及如何使用關(guān)系進(jìn)行查詢進(jìn)行講解,使讀者能夠快速掌握SQLAlchemy的關(guān)系操作。

1、案例

設(shè)計(jì)3個(gè)實(shí)體表:班級(jí)表class、學(xué)生表student、老師表teacher和1個(gè)關(guān)系表:class_teacher。班級(jí)與學(xué)生為一對(duì)多關(guān)系,班級(jí)與老師之間為多對(duì)多關(guān)系。

from sqlalchemy import Table,Column,Integer,ForeignKey,String
from sqlalchemy.orm import relationship,backref
from sqlalchemy.ext.declarative import declarative_base

Base=declarative_base()

class Class(Base):
    __tablename__="class"
    class_id=Column(Integer,primary_key=True)
    name=Column(String(50))
    level=Column(Integer)
    address=Column(String(50))

    class_teachers=relationship("ClassTeacher",backref="class")
    students=relationship("Student",backref="class")

class Student(Base):
    __tablename__="student"
    student_id=Column(Integer,primary_key=True)
    name=Column(String(50))
    age=Column(Integer)
    gender=Column(String(10))
    address=Column(String(50))
    class_id=Column(Integer,ForeignKey("class.id"))

class Teacher(Base):
    __tablename__="teacher"
    teacher_id=Column(Integer,primary_key=True)
    name=Column(String(50))
    gender=Column(String(10))
    telephone=Column(String(50))
    address=Column(String(50))
    class_teachers=relationship("ClassTeacher",backref="teacher")

class ClassTeacher(Base):
    __tablename__="class_teacher"
    teacher_id=Column(Integer,ForeignKey("teacher.teacher_id"),primary_key=True)
    class_id=Column(Integer,ForeignKey("class.id"),primary_key=True)

代碼中用了4個(gè)SQLAlchemy模型對(duì)4個(gè)表進(jìn)行了定義,其中與關(guān)系定義相關(guān)的部分如下:

外鍵設(shè)置:在列的定義中,為Column傳入ForeignKey進(jìn)行外鍵設(shè)置。

class_id=Column(Integer,ForeignKey("class.id"))

關(guān)系設(shè)置:通過relationship關(guān)鍵字在父模型中建立對(duì)字表的引用,例如Class模型中的關(guān)系設(shè)置如下:

students=relationship("Student",backref="calss")

其中的backref參數(shù)為可選參數(shù),如果設(shè)置backref,則此語句同時(shí)設(shè)置了 從父表對(duì)子表的引用。

一對(duì)多關(guān)系的使用:以后可以直接通過該students屬性獲得相關(guān)班級(jí)中所有學(xué)生的信息。如下代碼可以打印班級(jí)【三年二班】的所有學(xué)生信息。

class=session.query(Class).filter(Clss.name=="三年二班").first()

for student in class_.students:
    print(student)

多對(duì)多關(guān)系的使用:通過關(guān)聯(lián)模型ClassTeacher實(shí)現(xiàn),在其中分別設(shè)置模型Class和Teacher的外鍵,并且在父模型中設(shè)置相應(yīng)的relationship實(shí)現(xiàn)。多對(duì)多關(guān)系也可以想象成一個(gè)關(guān)聯(lián)表,分別對(duì)兩個(gè)父表實(shí)現(xiàn)了多對(duì)一的關(guān)系。班級(jí)與老師之間為多對(duì)多的關(guān)系,如下代碼可以打印班級(jí)【三年二班】中所有老師的信息

class=session.query(Class).filter(Class.name=="三年二班").first()
for class_teacher in class_.class_teachers:
    teacher=class_teacher.teacher
    print(teacher)
上述代碼中class_teacher.teacher是在模型teacher中針對(duì)ClassTeacher定義的反向引用。
2、連接查詢

在實(shí)際開發(fā)中,有了關(guān)系就必不可少地會(huì)有多表連接查詢的需求。下面通過實(shí)際例子演示如果進(jìn)行多表連接查詢。

在查詢語句中可以使用join關(guān)鍵字進(jìn)行連接查詢,打印出所有三年級(jí)學(xué)生的姓名:

students=session.query(Student).join(Class).filter(Class.level==3).all()
for student in students:
    print(student.namr)

上述查詢函數(shù)會(huì)自動(dòng)把外鍵關(guān)系作為連接條件,該查詢被SQLAlchemy自動(dòng)翻譯為如下SQL語句并執(zhí)行:

SELECT student.student_id AS student_student_id,
    student.name AS student.name,
    student.age AS student.age,
    student.gender AS student.gender,
    student.address AS student.address,
    student.class_id AS student_class_id
FROM student JOIN class ON student.class_id=class.class_id
WHERE class.leve=?
(3,)

如果需要將被連接表的內(nèi)心同樣打印出來,則可以在query中指定多個(gè)表對(duì)象。

下面的語句在打印出所有三年級(jí)學(xué)生姓名的同時(shí),打印出其所在班級(jí)的名字。

for student,class_ in session.query(Student,Class).join(Class).filter(Class.level==3).all():
    print(student.name,class_.name)

上述查詢函數(shù)會(huì)自動(dòng)把外鍵關(guān)系作為連接條件,該查詢被SQLAlchemy自動(dòng)翻譯為如下SQL語句并執(zhí)行:

SELECT student.student_id AS student_student_id,
    student.name AS student.name,
    student.age AS student.age,
    student.gender AS student.gender,
    student.address AS student.address,
    student.class_id AS student_class_id,
    class.class_id AS class_class_id,
    class.name AS class_name,
    class.level AS class_level,
    class.address AS class_location
FROM student JOIN class ON student.class_id=class.class_id
WHERE class.leve=?
(3,)

如果需要用除外鍵外的其他字段作為連接條件,則需要開發(fā)者在join中自行設(shè)置。下面打印出所有班級(jí)的address與學(xué)生的address相同的學(xué)生的姓名:

for student_name, in session.query(Student.name).join(Class,Class.address==Student.address).filter(Class.level==3).all():
    print(student_name)

上述查詢函數(shù)根據(jù)開發(fā)者指定的語句作為連接條件,并且因?yàn)橹苯又付吮徊樵兊淖侄危詼p少了實(shí)際SQL中的被查詢字段,提高了性能。該查詢被SQLAlchemy自動(dòng)翻譯為如下SQL語句執(zhí)行:

SELECT student.name AS student_name, FROM student JOIN class ON student.address=class.address

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44858.html

相關(guān)文章

  • Python-SQLAlchemy2節(jié):查詢條件設(shè)置

    摘要:上一篇文章第節(jié)入門下一篇文章第節(jié)關(guān)系操作在實(shí)際編程中需要根據(jù)各種不同的條件查詢數(shù)據(jù)庫(kù)記錄,查詢條件被稱為過濾器。通配符用百分號(hào)表示。以下條語句查詢結(jié)果相同,都是為的記錄。引入或邏輯關(guān)鍵字查詢是或者為的記錄,返回結(jié)果為為的記錄 上一篇文章:Python-SQLAlchemy:第1節(jié):SQLAlchemy入門下一篇文章:Python-SQLAlchemy:第3節(jié):關(guān)系操作 在實(shí)際編程中需...

    selfimpr 評(píng)論0 收藏0
  • Python-SQLAlchemy4節(jié):級(jí)聯(lián)

    摘要:上一篇文章第節(jié)關(guān)系操作級(jí)聯(lián)是在一對(duì)多關(guān)系中父表與子表進(jìn)行聯(lián)動(dòng)操作的數(shù)據(jù)庫(kù)術(shù)語。注意級(jí)聯(lián)獨(dú)立于本身針對(duì)外鍵的級(jí)聯(lián)定義。代碼執(zhí)行后數(shù)據(jù)庫(kù)表中的內(nèi)容的變化表五年二班理想路號(hào)樓表理想男靜安區(qū)女靜安區(qū)小馬哥女閘口區(qū)張三韓永躍男靜安區(qū) 上一篇文章:Python-SQLAlchemy:第3節(jié):關(guān)系操作 級(jí)聯(lián)是在一對(duì)多關(guān)系中父表與子表進(jìn)行聯(lián)動(dòng)操作的數(shù)據(jù)庫(kù)術(shù)語。因?yàn)楦副砼c子表通過外鍵關(guān)聯(lián),所以對(duì)父表或...

    henry14 評(píng)論0 收藏0
  • Python-SQLAlchemy1節(jié):SQLAlchemy入門

    摘要:下一篇文章第節(jié)查詢條件設(shè)置是編程語言下的一款開源軟件。提供了工具包及對(duì)象關(guān)系映射工具,使用許可證發(fā)行。在關(guān)閉連接時(shí)會(huì)自動(dòng)進(jìn)行事務(wù)提交操作。引入多條件查詢時(shí)使用。由于上下文函數(shù)退出時(shí)會(huì)自動(dòng)提交事務(wù),所以無需顯示的調(diào)用使新增生效。 下一篇文章:Python-SQLAlchemy:第2節(jié):查詢條件設(shè)置 SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對(duì)象關(guān)系...

    noONE 評(píng)論0 收藏0
  • Python-SQLALchemy

    摘要:因?yàn)槭枪ぷ髟谝粋€(gè)內(nèi)部,有時(shí)候我們可能不小心做了一些誤刪除的操作,可以回滾。我們先修改的用戶名為,然后重新添加一個(gè)新,但是記住這個(gè)時(shí)候我們還沒有。集合類型可以是各種合法類型,比如,但是默認(rèn)集合是一個(gè)。 官方文檔 Initialization # 檢查是否已經(jīng)安裝以及版本號(hào) >>> import sqlalchemy >>> sqlalchemy.__version__ ’1.1.4‘ ...

    kumfo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<