sqlalchemy第三部分

2022-09-12 02:27:14 字數 3885 閱讀 6012

##### 1.**復用。

在我們用sqlalchemy運算元據庫時,有部分**可以重複使用,我們將這部分放到乙個模組中,後面使用就可以呼叫這個模組,匯入裡面的方法。

```python

# 1.連線資料庫

from sqlalchemy import create_engine

hostname = '127.0.0.1' # ip位址

port = '3306' # 埠號

database = 'mydb' # 資料庫名

username = 'taka' # 使用者名稱

password = 'taka' # 使用者登入密碼

db_uri = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(username, password, hostname, port, database)

engine = create_engine(db_uri)

# 2. 宣告映像

from sqlalchemy.ext.declarative import declarative_base

base = declarative_base(engine)

# 5.建立會話

from sqlalchemy.orm import sessionmaker

session = sessionmaker(engine)

session = session()

##### 2.一對多表關係的實現

我們在講mysql的時候學院與學生的關係是一對多關係,下面是通過sqlalchemy來表示這種關係。

```python

from connect import base,session

from sqlalchemy import column,integer,string,foreignkey

from sqlalchemy.orm import relationship

class department(base):

__tablename__ = 'department'

d_id = column(integer,primary_key=true,autoincrement=true)

d_name = column(string(100))

student = relationship('student',backref='department')

def __repr__(self):

return '' % (self.d_id, self.d_name)

class student(base):

__tablename__ = 'student'

s_id = column(integer,primary_key=true,autoincrement=true)

s_name = column(string(50))

d_id = column(integer,foreignkey('department.d_id'))

def __repr__(self):

return '' % (self.s_id, self.s_name, self.d_id)

base.metadata.create_all()

```講`relationship`之前,先回顧一下,外來鍵它是乙個約束,但是並不是代表了關係,之前所講的一對多,一對一和多對多關係都是在我們的邏輯上,外來鍵約束不能代表這種關係,注意分清外來鍵是約束,沒有代表關係。

而在sqlalchemy裡面,這個`relationship`代表了一對多的關係,當然我們可以通過引數改變關係,它預設是一對多的關係,而這個關係是`sqlalchemy`裡面的,和資料庫沒有關係,但是`relationship`是和外來鍵一起使用的。

通過`relationship`在學院的類中增加了乙個學生的屬性,在學生的類中增加學生的屬性。這樣我們就可以通過這個屬性查出某個學院的所有的學生的列表,也可以查出某個學生的所屬學院,還可以通過學院的學生列表往這個學院中新增學員。

##### 3.一對一表關係實現

我們在講mysql的時候學生表與學生詳細資訊表的關係是一對一關係,下面是通過sqlalchemy來表示這種關係。

```python

class student(base):

__tablename__ = 'student'

s_id = column(integer,primary_key=true,autoincrement=true)

s_name = column(string(50))

d_id = column(integer,foreignkey('department.d_id'))

stu_details = relationship('stu_details',uselist=false)

def __repr__(self):

return '' % (self.s_id, self.s_name, self.d_id)

class stu_details(base):

__tablename__ = 'stu_details'

id = column(integer,primary_key=true,autoincrement=true)

age = column(integer)

city = column(string(100))

s_id = column(integer,foreignkey('student.s_id'),unique=true)

student = relationship('student')

```在這裡實現一對一關係和我們mysql中稍微的差別,我們通過外來鍵加唯一鍵實現mysql層面的一對一,通過`relationship`中的`uselist=false`實現python層面的表關係。

##### 4.多對多關係的實現

我們在講mysql的時候學生與課程的關係是多對多關係,下面是通過sqlalchemy來表示這種關係。

```python

stu_course = table('stu_course',base.metadata,

column('s_id',integer,foreignkey('students.s_id'),primary_key=true),

column('c_id',integer,foreignkey('course.c_id'),primary_key=true)

)class students(base):

__tablename__ = 'students'

s_id = column(integer,primary_key=true)

s_name = column(string(100))

course = relationship('course',secondary=stu_course)

class course(base):

__tablename__ = 'course'

c_id = column(integer,primary_key=true)

c_name = column(string(100))

students = relationship('students',secondary=stu_course)

```在多對多的關係中,我需要再建立一張表,通過這張表,我們建立多對多的關係。使用`relationship`當中`secondary`引數來獲取中間表,表示多對多關係。

### 總結

在資料庫中外鍵只有約束的功能,但是在`sqlalchemy`中,`relationship`表示了關係,但是這個關係只是在`sql alchemy`裡面,和資料庫並沒有關係,在`sqlalchemy`裡面,其實也是轉成`sql`語句去做的,但是使用`sqlalchemy`給我們提供的這個方法,可以讓我們寫跟少的`sql`語言或者**。

劇本第三部分

第三部分劇本 場景一 女生宿舍,a趴在桌子上睡覺,電腦螢幕亮著,是vs 但是就寫了一行 小碼趴在a的胳膊上睡著。突然,a醒了,發現自己上課要遲到了,a 哎呀,完了完了,大中午的怎麼趴在這睡著了 邊說話邊收拾書包 轉頭看向小碼 a 把你放哪呢 說話的時候四周環視 算了,跟我去吧,我先把你放書包裡 說話...

第三部分 效能

索引管理 效能優化 效能監控 db.c1.find explain 查詢的詳細資訊列出來 db.c1.getindexkyes 所有索引的字段 db.c1.getindexes 所有索引的相關資訊 2 唯一索引 只需要在ensureindex命令中提定 uniqure true 即可建立唯一索引,如...

Linux筆記第三部分

最近開學什麼的事比較多,然後今天開始學校安排了培訓,全日制,早上9點到晚上7點,遭不住,不過培訓的機器用的ubantu,頓時覺得自己會玩的 捂臉 linux 13linux使用者基礎 1.使用者 用來限制使用者或程序可以使用的資源 組 用來方便組織管理使用者 2.每個使用者 組 都會有乙個useri...