##### 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...