Sqlalchemy單例模式
- 1.首先安裝sqlalchemy模塊巍虫,在控制臺使用
pip install sqlalchemy
命令安裝模塊字支。 -
2.我使用的是mysql數(shù)據(jù)庫鉴象,先要開啟數(shù)據(jù)庫(安裝過程中修改配置文件保證編碼格式是utf8抑胎,這個參考網(wǎng)上的安裝過程)梨撞。windows平臺輸入services.msc彈出服務(wù)雹洗,可手動開啟mysql服務(wù),或者進(jìn)入控制臺進(jìn)入如下目錄輸入
-
3.從sqlalchemy模塊中導(dǎo)入我們要用的屬性
接下來與數(shù)據(jù)庫建立連接卧波,即創(chuàng)建一個連接引擎,create_engine(數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動://數(shù)據(jù)庫用戶名:數(shù)據(jù)庫密碼@IP地址:端口/數(shù)據(jù)庫)时肿,最終建立連接的是test數(shù)據(jù)庫。
- 4.創(chuàng)建自定義類港粱,繼承基類螃成,自定義類屬性中
__tablename__
這個屬性必不可少,代表數(shù)據(jù)庫中表的名字查坪,添加表結(jié)構(gòu)設(shè)定一個id屬性作為主鍵寸宏,再添加一個name屬性。
-
5.執(zhí)行創(chuàng)建偿曙,將表結(jié)構(gòu)存到了metadata里面击吱,然后讓metadata執(zhí)行create_all()方法,這樣就向數(shù)據(jù)庫里創(chuàng)建了user表遥昧。
-
6.創(chuàng)建session,之后運(yùn)行程序進(jìn)入交互式環(huán)境只要操作這個session對象就可以覆醇。
- 7.運(yùn)行程序進(jìn)入交互式環(huán)境,我們嘗試使用幾種sqlalchemy語句操作對象
- 創(chuàng)建對象
u1 = User(id=1,name='zhangshu')
,加入到上面創(chuàng)建的session中炭臭,session.add(u1)
,提交到數(shù)據(jù)庫session.commit()
永脓。 - 利用filter_by查詢創(chuàng)建的對象
u = session.query(User).filter_by(id=1).first()
,u是個對象,輸入u.name
結(jié)果為‘zhangshu'鞋仍。 - 利用filter查詢創(chuàng)建的對象常摧,
u = session.query(User).filter(User.id==1).first()
,輸入u.name
仍然為'zhangshu'。 - 查詢所有的對象威创,
session.query(User).all()
落午。 - 排序,
session.query(User).order_by('id').all()肚豺。
- 切片操作溃斋,
session.query(User)[1:]
- 刪除對象,
session.delete(u)
表之間關(guān)系建立(一對多)
- 1.在上面的基礎(chǔ)上添加導(dǎo)入
relationship
- 2.修改
user
表
添加addresses屬性吸申,與Address類對象發(fā)生關(guān)系梗劫,backref中的參數(shù)是自定義的享甸,如果User類對象引用addresses,同樣Address類對象可以引用itsuser - 3.建立
address
表
uid屬性是一個外鍵,與user
表的id
關(guān)聯(lián)梳侨,記住這里是user
表蛉威,不是User
類,relationship與ForeignKey外鍵是一起使用的走哺,這樣就建立了一對多的關(guān)系蚯嫌,user為一,address為多丙躏。 -
4.運(yùn)行程序進(jìn)入交互式環(huán)境
- 5.如果建立的是一對一的關(guān)系择示,只需要在backref參數(shù)后面加上
uselist=False
表之間建立多對多的關(guān)系
1.建立一張公共的表來聯(lián)系兩張表,我們設(shè)計(jì)聯(lián)系人與分組的模型彼哼,一個組可以有多個聯(lián)系人对妄,一個聯(lián)系人也可以在不同組湘今,所以這個是一個多對多模型敢朱。
-
2.建立公共表
-
3.構(gòu)建聯(lián)系人表
groups屬性與Group
類對象發(fā)生關(guān)系,第二個參數(shù)是secondary=公共表
摩瞎,·backref
自定義參數(shù)拴签,同樣Group
類對象也可以引用這個自定義參數(shù)(這里為contacts
)。 -
4.構(gòu)建分組表
-
5.測試代碼貼在下面