前一篇文章有提到该如何利用 SQLALchemy 建立一张资料表,
这篇文章主要是纪录该如何利用 SQLALchemy 进行资料的操作,
查询的部分则是会放到下一篇文章
一、新增资料
可以透过在同一个 module 下直接进行资料的操作,
也可以将另外撰写一个 module 并将表结构以及操作实体 import
来进行操作,下面的範例都会是採用后者的写法并将档案命名为 test.py
(一)、引入表结构以及 create_session
from main import create_sessionfrom main import Testsession = create_session()
(二)、插入单笔资料
利用 session.add() 即可插入单笔资料
import datetimefrom main import create_sessionfrom main import Testsession = create_session()datas = { "name": "nick", "time": datetime.datetime.now() }session.add(Test(**datas))session.commit()session.close()
注: sqlite 的 DATETIME 只接受 DATETIME object 的型态,因此不需要 strftime()
注: **
代表将资料打包成 key, value 的形式,详细参考资料
如果加入了不在表结构当中的元素,系统则会跳出错误
from main import create_sessionfrom main import Testsession = create_session()datas = { "name": "nick", "time": datetime.datetime.now(), "location": "Taiwan" }try: session.add(Test(**datas)) session.commit()except Exception as e: print(e.__class__.__name__) print(str(e))finally: session.close()
(三)、插入多笔资料
将资料以串列的型态包起来并利用 session.add_all()
from main import create_sessionfrom main import Testsession = create_session()datas = [ Test(name="nick", time=datetime.datetime.now()), Test(name="honey", time=datetime.datetime.now())]try: session.add_all(datas) session.commit()except Exception as e: print(e.__class__.__name__) print(str(e))finally: session.close()
二、修改资料
from main import create_sessionfrom main import Testsession = create_session()datas = {"name": "andy"}try: session.query(Test).filter_by(id=1).update(datas) session.commit()except Exception as e: print(e.__class__.__name__) print(str(e))finally: session.close()
语法拆解:
session.query(Test): 表示针对 Test 这个资料结构中的资料表进行查询.filter_by(id=1): 表示利用 ORM 进行资料筛选,选到指定资料.update(datas)三、删除资料
原理同 update(),只是 delete() 并不需要传入参数
from main import create_sessionfrom main import Testsession = create_session()try: session.query(Test).filter_by(id=1).delete() session.commit()except Exception as e: print(e.__class__.__name__) print(str(e))finally: session.close()