Python SqlAlchemy資料庫持久化使用方法

HuangZhang_123發表於2017-06-29

SqlAlchemy版本:1.1.11
作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423


資料持久化是常用的開發技術。具體有點請參考百度百科:請點選

Python的資料庫ORM框架是資料持久層框架。這只是其中一種框架,還有其他的框架,請參考

總的來說,在實際開發中,需要不停的對資料庫進行連線和操作,最基本的就是連線資料庫,然後通過sql語句進行增刪改,提交事務,關閉連線。這當然是最入門的做法。效能也是最差的。
這時候就引入了資料持久層的方法。


本文介紹python中最流行的SQLAlchemy框架的使用。
安裝:直接用pip install SQLAlchemy即可
使用方法:
建立連結:

from sqlalchemy import create_engine
engine=create_engine('sqlite:////MyDB.sqlite3',echo=True)

這裡寫圖片描述
這裡的建立是告訴SQLAlchemy你的資料庫檔案的路徑。這裡sqlite:////MyDB.sqlite3,py檔案和MyDB.sqlite3是同一個目錄下,如果不同目錄,需要寫上路徑。
echo=False(True),在執行py檔案的時候是不顯示(顯示)Sql執行情況。這個可以自己試試。
這裡列出一系列的資料庫連結方式:
這裡寫圖片描述
例:

mysql://root:pass/test
root是使用者名稱 pass密碼 test資料庫

明確了路徑和相關的資料庫名之後,就是建立會話。也可以理解為sql的遊標

from sqlalchemy.orm import sessionmaker
DBSession = sessionmaker(bind=engine)
session = DBSession()

然後就是建立物件類

from sqlalchemy.ext.declarative import declarative_base
Base=declarative_base()

因為持久化都是將資料庫的欄位轉化成程式碼裡面類的屬性來表示的。

建立表

from sqlalchemy import create_engine,Column,String,Integer
class Mybase(Base):
	#表名
	__tablename__ ='mycars'
	#欄位,屬性
	myid=Column(String(50), primary_key=True)
	price=Column(String(50))

建立物件之後,但是在資料庫裡面還沒生成該表。可以自定義一個方法:

def CreatDb():
	#建立表
	Base.metadata.create_all(engine)
def delDb():
	#刪除表
	Base.metadata.drop_all(engine)

新增資料

dt=Mybase(myid='aaa',price="aaa")
session.add(dt)
session.commit()

修改資料

#根據新增後再修改
dt.price='aaaaa'
#提交資料庫
session.commit()
#查詢符合條件資料再修改,filter_by是一個list,first()表示第一個
ModifyDt=session.query(Mybase).filter_by(myid='asd').first()
#修改資料
ModifyDt.price='ccccc'
#提交資料庫
session.commit()

查詢資料
查詢資料是用filter_by,上一程式碼就是查詢後再修改資料。
如果多條件查詢,使用多次filter_by即可

querydt=session.query(Mybase).filter(Mybase.myid == 'asd').filter(Mybase.price == 'bbbb')
for i in querydt:
	print(i.myid)

全部程式碼:

from sqlalchemy import create_engine,Column,String,Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

#建立連結
engine=create_engine('sqlite:////Mydb.sqlite3',echo=False)
#建立會話
DBSession = sessionmaker(bind=engine)
session = DBSession()

Base=declarative_base()


class Mybase(Base):
	#表名
	__tablename__ ='mycars'
	#欄位,屬性
	myid=Column(String(50), primary_key=True)
	price=Column(String(50))

def CreatDb():
	#建立表
	Base.metadata.create_all(engine)
	
def delDb():
	#刪除表
	Base.metadata.drop_all(engine)

#建立表	
CreatDb()

#新增資料
dt=Mybase(myid='aaa',price="aaa")
session.add(dt)
session.commit()

#修改資料
dt.price='aaaaa'
session.commit()

#查詢後修改
ModifyDt=session.query(Mybase).filter_by(myid='asd').first()
ModifyDt.price='bbbb'
session.commit()

#多條件查詢,這裡注意的是filter_by和filter的區別,filter可以多表查詢。比較運算子也不一樣。filter必需帶表名
querydt=session.query(Mybase).filter(Mybase.myid == 'asd').filter(Mybase.price == 'bbbb')
for i in querydt:
	print(i.myid)

運算結果:
這裡寫圖片描述

此外還有很多資料庫操作。這個可以參考官方文件:請點選
注意:不同SqlAlchemy版本而且版本相差較大的,在語法上會有不同的區別。

相關文章